This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate:
authorNicholas Clark <nick@ccl4.org>
Wed, 7 Feb 2007 18:45:59 +0000 (18:45 +0000)
committerNicholas Clark <nick@ccl4.org>
Wed, 7 Feb 2007 18:45:59 +0000 (18:45 +0000)
[ 27371]
Subject: [PATCH] include configure.com in Porting/checkcfgvar.pl
From: Abe Timmerman <abe@ztreet.demon.nl>
Date: Fri, 3 Mar 2006 18:43:24 +0100
Message-Id: <200603031843.24250.abe@ztreet.demon.nl>

[ 27374]
Subject: Re: [PATCH] include configure.com in Porting/checkcfgvar.pl
From: Abe Timmerman <abe@ztreet.demon.nl>
Date: Fri, 3 Mar 2006 22:56:47 +0100
Message-Id: <200603032256.47170.abe@ztreet.demon.nl>

[ 27386]
Subject: PATCH: 2 vms specific build files in perl @ 27383
From: Peter Prymmer <PPrymmer@factset.com>
Date: Sun, 05 Mar 2006 20:30:09 -0500
Message-id: <OFF0B19477.39D9ABEB-ON85257129.00070590-85257129.000840D3@factset.com>

[ 27563]
Subject: [patch@27529] thread.h - VMS needs more stack
From: "John E. Malmberg" <wb8tyw@qsl.net>
Date: Fri, 17 Mar 2006 11:05:33 -0500
Message-id: <441ADE4D.2090207@qsl.net>

[ 27593]
improve thread linking options on VMS

[ 28334]
Subject: [PATCH] redo part of change 27374
From: Abe Timmerman <abe@ztreet.demon.nl>
Date: Mon, 29 May 2006 23:24:51 +0200
Message-id: <200605292324.51714.abe@ztreet.demon.nl>
p4raw-link: @28334 on //depot/perl: ecd6e0980bb546d8adbd5495a9a34caea25be6ad
p4raw-link: @27593 on //depot/perl: 3f39e13a499cc8fdf7dbbf3a766ece4fe9ff2c0e
p4raw-link: @27563 on //depot/perl: 93a096870a2b1bc978c5a5479df6131dc5b46062
p4raw-link: @27386 on //depot/perl: e8e0953481a8eb69731d048ec19e15bbd537fd73
p4raw-link: @27374 on //depot/perl: b89d399a31373fa709aa1afa4ee04b52768ea37b
p4raw-link: @27371 on //depot/perl: a0e39d8902c1f3b922488e26e8f416ebb45816a7

p4raw-id: //depot/maint-5.8/perl@30162
p4raw-integrated: from //depot/perl@28334 'edit in' configure.com
(@28189..)
p4raw-integrated: from //depot/perl@27593 'merge in'
vms/descrip_mms.template (@27389..)
p4raw-integrated: from //depot/perl@27563 'merge in' thread.h
(@26732..)
p4raw-integrated: from //depot/perl@27386 'copy in' vms/gen_shrfls.pl
(@25710..)
p4raw-integrated: from //depot/perl@27371 'ignore'
Porting/checkcfgvar.pl (@25581..)

Porting/checkcfgvar.pl
configure.com
thread.h
vms/descrip_mms.template
vms/gen_shrfls.pl

index 0a7b24e..1db53d7 100644 (file)
@@ -6,7 +6,8 @@
 # needed symbols are not lagging after how Configure thinks the world
 # is laid out.
 #
-# VMS is not handled here, due to their own rather elaborate DCL scripting.
+# VMS is probably not handled properly here, due to their own
+# rather elaborate DCL scripting.
 #
 
 use strict;
@@ -30,6 +31,7 @@ my @CFG = (
           "win32/config.vc",
           "win32/config.vc64",
           "wince/config.ce",
+          "configure.com",
          );
 
 sub read_file {
@@ -84,6 +86,8 @@ for my $cfg (@CFG) {
     read_file($cfg,
              sub {
                  return if /^\#/ || /^\s*$/;
+                 return if $cfg eq 'configure.com' &&
+                           ! /^\$\s+WC "(\w+)='(.*)'"$/;
                  # foo='bar'
                  # foo=bar
                  # $foo='bar' # VOS 5.8.x specialty
@@ -93,6 +97,9 @@ for my $cfg (@CFG) {
                  }
                  elsif (/^\$?(\w+)=(.*)$/) {
                      $cfg{$1}++;
+                 }
+                 elsif (/^\$\s+WC "(\w+)='(.*)'"$/) {
+                     $cfg{$1}++;
                  } else {
                      warn "$cfg:$.:$_";
                  }
index 2b9091c..b487379 100644 (file)
@@ -52,7 +52,8 @@ $ use64bitint = "n"
 $ uselargefiles = "n"
 $ usesitecustomize = "n"
 $ C_Compiler_Replace = "CC="
-$ Thread_Live_Dangerously = "MT="
+$ thread_upcalls = "MTU="
+$ thread_kernel = "MTK="
 $ use_two_pot_malloc = "N"
 $ use_pack_malloc = "N"
 $ use_debugmalloc = "N"
@@ -903,7 +904,7 @@ $   config_symbols1 ="|installprivlib|installscript|installsitearch|installsitel
 $   config_symbols2 ="|prefix|privlib|privlibexp|scriptdir|sitearch|sitearchexp|sitebin|sitelib|sitelib_stem|sitelibexp|try_cxx|use64bitall|use64bitint|"
 $   config_symbols3 ="|usecasesensitive|usedefaulttypes|usedevel|useieee|useithreads|usemultiplicity|usemymalloc|usedebugging_perl|useperlio|usesecurelog|"
 $   config_symbols4 ="|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|uselargefiles|usesitecustomize|"
-$   config_symbols5 ="|buildmake|builder|"
+$   config_symbols5 ="|buildmake|builder|usethreadupcalls|usekernelthreads"
 $!  
 $   open/read CONFIG 'config_sh'
 $   rd_conf_loop:
@@ -1194,6 +1195,9 @@ $   prefixbase = prefix - "]"
 $!  Add _ROOT to make install PERL_ROOT differ from build directory.
 $   prefix = prefixbase + "_ROOT.]"
 $ ENDIF
+$ ! more redundant scrubbing of values
+$ prefix = prefix - "000000."
+$ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN prefix = prefix - "]" + ".]"
 $ src = prefix
 $!: determine root of directory hierarchy where package will be installed.
 $ dflt = prefix
@@ -2430,28 +2434,50 @@ $       use_5005_threads="N"
 $     ELSE
 $       use_5005_threads="Y"
 $     ENDIF
-$     ! Are they on VMS 7.1 on an alpha or itanium?
-$     if (archname.nes."VMS_VAX").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
+$     ! Are they on VMS 7.1 or greater?
+$     IF "''f$extract(1,3, f$getsyi(""version""))'" .GES. "7.1"
 $     THEN
 $       echo ""
-$       echo "Threaded perl can be linked to use multiple kernel threads"
-$       echo "and system upcalls on VMS 7.1+ on Alpha systems.  This feature"
-$       echo "allows multiple threads to execute simultaneously on an SMP"
-$       echo "system as well as preventing a single thread from blocking"
-$       echo "all the threads in a program, even on a single-processor"
-$       echo "machine.  Unfortunately, this feature isn't safe on an"
-$       echo "unpatched 7.1 system (several OS patches were required when"
-$       echo "this procedure was written)."
-$       bool_dflt = "n"
-$       rp = "Enable multiple kernel threads and upcalls? [''bool_dflt'] "
+$      echo "Threaded Perl can be linked to use system upcalls on your system. This feature"
+$      echo "allows the thread scheduler to be made aware of system events (such as I/O)"
+$      echo "so as to prevent a single thread from blocking all the threads in a program,"
+$      echo "even on a single-processor machine."
+$      bool_dflt = "y"
+$      IF f$type(usethreadupcalls) .NES. ""
+$      THEN
+$              if .not. usethreadupcalls .or. usethreadupcalls .eqs. "undef" then bool_dflt="n"
+$      ENDIF
+$       rp = "Enable thread upcalls? [''bool_dflt'] "
 $       gosub myread
-$       if ans
+$       IF ans
 $       THEN
-$         Thread_Live_Dangerously = "MT=MT=1"
+$           thread_upcalls = "MTU=MTU=1"
+$          usethreadupcalls = "define"
+$          ! Are they on alpha or itanium?
+$          IF (archname .NES. "VMS_VAX") .AND. ("''f$extract(1,3, f$getsyi(""version""))'" .GES. "7.2")
+$          THEN
+$              echo ""
+$              echo "Threaded Perl can be linked to use multiple kernel threads on your system."
+$              echo "This feature allows multiple user threads to make use of multiple CPUs on
+$              echo "a multi-processor machine."
+$              bool_dflt = "n"
+$              IF f$type(usekernelthreads) .nes. ""
+$              THEN
+$                      if usekernelthreads .or. usekernelthreads .eqs. "define" then bool_dflt="y"
+$              ENDIF
+$              rp = "Enable multiple kernel threads? [''bool_dflt'] "
+$              gosub myread
+$              IF ans
+$              THEN
+$                  thread_kernel = "MTK=MTK=1"
+$                  usekernelthreads = "define"
+$           ENDIF
 $       ENDIF
 $     ENDIF
 $   ENDIF
 $ ENDIF
+$ IF F$TYPE(usethreadupcalls) .EQS. "" THEN usethreadupcalls = "undef"
+$ IF F$TYPE(usekernelthreads) .EQS. "" THEN usekernelthreads = "undef"
 $ IF archname .NES. "VMS_VAX"
 $ THEN
 $! Case sensitive?
@@ -5652,8 +5678,8 @@ $ WC "d_bincompat3='undef'"
 $! WC "d_bsdpgrp='undef'"
 $ WC "d_bsdgetpgrp='undef'"
 $ WC "d_bsdsetpgrp='undef'"
-$ WC "d_builtin_choose_expr='undef'"
-$ WC "d_builtin_expect='undef'"
+$ WC "d_builtin_choose_expr='undef'" ! GCC only
+$ WC "d_builtin_expect='undef'" ! GCC only
 $ WC "d_bzero='" + d_bzero + "'"
 $ WC "d_casti32='define'"
 $ WC "d_castneg='define'"
@@ -6256,9 +6282,14 @@ $ WC "shmattype='" + " '"
 $ WC "shortsize='" + shortsize + "'"
 $ WC "shrplib='define'"
 $ WC "sig_name='" + sig_name + "'"
-$ tmp = "sig_name_init='" + sig_name_init + "'"
-$ WC/symbol tmp
-$ DELETE/SYMBOL tmp
+$ IF (f$length(sig_name_init) .GE. 1024)
+$ THEN
+$     tmp = "sig_name_init='" + sig_name_init + "'"
+$     WC/symbol tmp
+$     DELETE/SYMBOL tmp
+$ ELSE
+$     WC "sig_name_init='" + sig_name_init + "'"
+$ ENDIF
 $ WC "sig_num='" + sig_num + "'"
 $ WC "sig_num_init='" + sig_num_init + "'"
 $ WC "sig_count='" + sig_count + "'"
@@ -6314,6 +6345,7 @@ $ WC "usedl='" + usedl + "'"
 $ WC "usefaststdio='" + usefaststdio + "'"
 $ WC "useieee='" + useieee + "'"                    ! VMS-specific
 $ WC "useithreads='" + useithreads + "'"
+$ WC "usekernelthreads='" + usekernelthreads + "'"     ! VMS-specific
 $ WC "uselargefiles='" + uselargefiles + "'"
 $ WC "uselongdouble='" + uselongdouble + "'"
 $ WC "usemorebits='" + usemorebits + "'"
@@ -6327,6 +6359,7 @@ $ WC "usesecurelog='" + usesecurelog + "'"  ! VMS-specific
 $ WC "usesitecustomize='" + usesitecustomize + "'"
 $ WC "usesocks='undef'"
 $ WC "usethreads='" + usethreads + "'"
+$ WC "usethreadupcalls='" + usethreadupcalls + "'"     ! VMS-specific
 $ WC "usevendorprefix='" + "'" ! try to say no, though we'll be ignored as of MM 5.90_01
 $ WC "usevfork='true'"
 $ WC "usevmsdebug='" + usevmsdebug + "'"     ! VMS-specific
@@ -6645,7 +6678,7 @@ $ echo4 "Extracting ''defmakefile' (with variable substitutions)"
 $ DEFINE/USER_MODE sys$output 'UUmakefile'
 $ mcr []munchconfig 'config_sh' 'Makefile_SH' "''DECC_REPLACE'" "''DECCXX_REPLACE'" "''ARCH_TYPE'" "''GNUC_REPLACE'" -
 "''SOCKET_REPLACE'" "''THREAD_REPLACE'" "''C_Compiler_Replace'" "''MALLOC_REPLACE'" -
-"''Thread_Live_Dangerously'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'" "''LARGEFILE_REPLACE'"
+"''THREAD_UPCALLS'" "''THREAD_KERNEL'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'" "''LARGEFILE_REPLACE'"
 $! Clean up after ourselves
 $ DELETE/NOLOG/NOCONFIRM []munchconfig.exe;
 $!
@@ -6886,8 +6919,6 @@ $!----------------------------------------------
 $ pcsi_producer = f$trnlnm("PCSI_PRODUCER")
 $ if pcsi_producer .eqs. ""
 $ then
-$   prefix = prefix - "000000."
-$   IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN prefix = prefix - "]" + ".]"
 $   WRITE CONFIG "$ define/translation=concealed ''vms_prefix' ''prefix'"
 $ else
 $  WRITE CONFIG "$ myproc = f$environment(""PROCEDURE"")"
@@ -6902,12 +6933,6 @@ $  WRITE CONFIG "$ then"
 $  WRITE CONFIG "$  define/translation=concealed ''vms_prefix' 'myroot_dev'['myroot_dir'.]"
 $  WRITE CONFIG "$ endif"
 $ endif
-$
-$ prefix = prefix - "000000."
-$ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN prefix = prefix - "]" + ".]" 
-$ WRITE CONFIG "$ define/translation=concealed ''vms_prefix' ''prefix'"
-
-
 $ WRITE CONFIG "$ ext = "".exe"""
 $ IF sharedperl
 $ THEN
@@ -6939,9 +6964,6 @@ $   THEN
 $     WRITE CONFIG "$ set command ''vms_prefix':[000000]''packageup'.CLD"
 $   ENDIF
 $ ENDIF !  perl_symbol
-$ WRITE CONFIG "$ define/nolog pod2text ''vms_prefix':[lib.pod]pod2text.com"
-$ WRITE CONFIG "$ define/nolog pod2html ''vms_prefix':[lib.pod]pod2html.com"
-$ WRITE CONFIG "$ define/nolog pod2man  ''vms_prefix':[lib.pod]pod2man.com"
 $!
 $ IF (tzneedset)
 $ THEN
@@ -6964,16 +6986,16 @@ $ WRITE CONFIG "$ h2ph       == """ + perl_setup_perl + " ''vms_prefix':[utils]h
 $ WRITE CONFIG "$ h2xs       == """ + perl_setup_perl + " ''vms_prefix':[utils]h2xs.com"""
 $ WRITE CONFIG "$ instmodsh  == """ + perl_setup_perl + " ''vms_prefix':[utils]instmodsh.com"""
 $ WRITE CONFIG "$ libnetcfg  == """ + perl_setup_perl + " ''vms_prefix':[utils]libnetcfg.com"""
-$ WRITE CONFIG "$ perlbug    == """ + perl_setup_perl + " ''vms_prefix':[lib]perlbug.com"""
+$ WRITE CONFIG "$ perlbug    == """ + perl_setup_perl + " ''vms_prefix':[utils]perlbug.com"""
 $ WRITE CONFIG "$!perlcc     == """ + perl_setup_perl + " ''vms_prefix':[utils]perlcc.com"""
-$ WRITE CONFIG "$ perldoc    == """ + perl_setup_perl + " ''vms_prefix':[lib.pods]perldoc.com """"-t"""""""
+$ WRITE CONFIG "$ perldoc    == """ + perl_setup_perl + " ''vms_prefix':[utils]perldoc.com """"-t"""""""
 $ WRITE CONFIG "$ perlivp    == """ + perl_setup_perl + " ''vms_prefix':[utils]perlivp.com"""
 $ WRITE CONFIG "$ piconv     == """ + perl_setup_perl + " ''vms_prefix':[utils]piconv.com"""
 $ WRITE CONFIG "$ pl2pm      == """ + perl_setup_perl + " ''vms_prefix':[utils]pl2pm.com"""
-$ WRITE CONFIG "$ pod2html   == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2html"""
-$ WRITE CONFIG "$ pod2latex  == """ + perl_setup_perl + " ''vms_prefix':[lib.pod]pod2latex.com"""
-$ WRITE CONFIG "$ pod2text   == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2text"""
-$ WRITE CONFIG "$!pod2man    == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2man"""
+$ WRITE CONFIG "$ pod2html   == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2html.com"""
+$ WRITE CONFIG "$ pod2latex  == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2latex.com"""
+$ WRITE CONFIG "$ pod2text   == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2text.com"""
+$ WRITE CONFIG "$!pod2man    == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2man.com"""
 $ WRITE CONFIG "$ pod2usage  == """ + perl_setup_perl + " ''vms_prefix':[utils]pod2usage.com"""
 $ WRITE CONFIG "$ podchecker == """ + perl_setup_perl + " ''vms_prefix':[utils]podchecker.com"""
 $ WRITE CONFIG "$ podselect  == """ + perl_setup_perl + " ''vms_prefix':[utils]podselect.com"""
index e15c7c9..0f24af6 100644 (file)
--- a/thread.h
+++ b/thread.h
 #  define THREAD_CREATE_NEEDS_STACK (32*1024)
 #endif
 
+#ifdef __VMS
+  /* Default is 1024 on VAX, 8192 otherwise */
+#  define THREAD_CREATE_NEEDS_STACK (32*1024)
+#endif
+
 #ifdef I_MACH_CTHREADS
 
 /* cthreads interface */
index a69e217..465e491 100644 (file)
@@ -29,7 +29,8 @@
 ~SOCKET~
 ~MALLOC~
 ~CC~
-~MT~
+~MTK~
+~MTU~
 ~FLAGS~
 ~LARGEFILE~
 
@@ -210,6 +211,16 @@ THREAD = THREAD
 THREADH =
 .endif
 
+.ifdef MTU
+.ifdef MTK
+MTHREADLINKFLAGS = /THREADS=(MULTIPLE_KERNEL,UPCALLS)
+.else
+MTHREADLINKFLAGS = /THREADS=UPCALLS
+.endif
+.else
+MTHREADLINKFLAGS = 
+.endif
+
 # C preprocessor manifest "DEBUGGING" ==> perl -D, not the VMS debugger
 .IFDEF LARGEFILE
 CFLAGS = $(XTRACCFLAGS)$(DBGCCFLAGS)$(FLAGS)/Define=$(LARGEFILE)
@@ -432,7 +443,7 @@ perlmain.c : miniperlmain.c $(MINIPERL_EXE) [.vms]writemain.pl
 .ifdef __DEBUG__
 # Link an extra perl that doesn't invoke the debugger
 perl : $(DBG)perl$(E)
-       Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoCross/NoFull/Exe=N$(DBG)perl$(E) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
+       Link $(LINKFLAGS)$(MTHREADLINKFLAGS)/NoDebug/Trace/NoMap/NoCross/NoFull/Exe=N$(DBG)perl$(E) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
 .else
 perl : $(DBG)perl$(E)
        @ Continue
@@ -440,11 +451,7 @@ perl : $(DBG)perl$(E)
 
 $(DBG)perl$(E) : perlmain$(O), $(DBG)perlshr$(E), $(MINIPERL_EXE)
        @ @[.vms]genopt "PerlShr.Opt/Write" "|" "''F$Environment("Default")'$(DBG)PerlShr$(E)/Share"
-.ifdef MT
-       Link $(LINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)/THREAD=(MULTI,UPCALL)
-.else
-       Link $(LINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
-.endif
+       Link $(LINKFLAGS)$(MTHREADLINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
 
 $(DBG)perlshr$(E) : $(DBG)libperl$(OLB) $(extobj) $(DBG)perlshr_xtras.ts
        Link $(LINKFLAGS)/Share=$(MMS$TARGET) $(extobj) []$(DBG)perlshr_bld.opt/Option, perlshr_attr.opt/Option
index fcd72f4..5fc9165 100644 (file)
@@ -60,6 +60,10 @@ $isvax = `\$ Write Sys\$Output \(F\$GetSyI(\"HW_MODEL\") .LE. 1024 .AND. F\$GetS
 chomp $isvax;
 print "\$isvax: \\$isvax\\\n" if $debug;
 
+$isi64 = `\$ Write Sys\$Output \(F\$GetSyI(\"HW_MODEL\") .GE. 4096`;
+chomp $isi64;
+print "\$isi64: \\$isi64\\\n" if $debug;
+
 print "Input \$cc_cmd: \\$cc_cmd\\\n" if $debug;
 $docc = ($cc_cmd !~ /^~~/);
 print "\$docc = $docc\n" if $debug;
@@ -258,8 +262,14 @@ if ($isvax) {
 }
 
 unless ($isgcc) {
-  print OPTBLD "PSECT_ATTR=\$GLOBAL_RO_VARS,PIC,NOEXE,RD,NOWRT,SHR\n";
-  print OPTBLD "PSECT_ATTR=\$GLOBAL_RW_VARS,PIC,NOEXE,RD,WRT,NOSHR\n";
+  if ($isi64) {
+    print OPTBLD "PSECT_ATTR=\$GLOBAL_RO_VARS,NOEXE,RD,NOWRT,SHR\n";
+    print OPTBLD "PSECT_ATTR=\$GLOBAL_RW_VARS,NOEXE,RD,WRT,NOSHR\n";
+  }
+  else {
+    print OPTBLD "PSECT_ATTR=\$GLOBAL_RO_VARS,PIC,NOEXE,RD,NOWRT,SHR\n";
+    print OPTBLD "PSECT_ATTR=\$GLOBAL_RW_VARS,PIC,NOEXE,RD,WRT,NOSHR\n";
+  }
 }
 print OPTBLD "case_sensitive=yes\n" if $care_about_case;
 foreach $var (sort (keys %vars,keys %cvars)) {