This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
completion and docs for dynamic loading on OS/390
[perl5.git] / hints / os390.sh
index 7a69634..54787e8 100644 (file)
@@ -3,7 +3,8 @@
 # OS/390 hints by David J. Fiander <davidf@mks.com>
 #
 # OS/390 OpenEdition Release 3 Mon Sep 22 1997 thanks to:
-#     
+# 
+#     John Goodyear <johngood@us.ibm.com>
 #     John Pfuntner <pfuntner@vnet.ibm.com>
 #     Len Johnson <lenjay@ibm.net>
 #     Bud Huff  <BAHUFF@us.oracle.com>
@@ -42,27 +43,12 @@ case "$optimize" in
 '') optimize='none' ;;
 esac
 
-# ccdlflags have yet to be determined.
-#case "$ccdlflags" in
-#'') ccdlflags='-c' ;;
-#esac
-
 # To link via definition side decks we need the dll option
 # You can override this with Configure -Ucccdlflags or somesuch.
 case "$cccdlflags" in
-'') cccdlflags='-W 0,dll,"langlvl(extended)"' ;;
+'') cccdlflags='-W 0,dll' ;;
 esac
 
-# ldflags have yet to be determined.
-#case "$ldflags" in
-#'') ldflags='' ;;
-#esac
-
-# lddlflags have yet to be determined.
-#case "$lddlflags" in
-#'') lddlflags='' ;;
-#esac
-
 case "$so" in
 '') so='a' ;;
 esac
@@ -83,17 +69,55 @@ case "$usenm" in
 esac
 
 # Dynamic loading doesn't work on OS/390 quite yet.
-# You can override this with 
-#  Configure -Dusedl -Ddlext=.so -Ddlsrc=dl_dllload.xs.
+# However the easiest way to experiment with dynamic loading is with:
+#  Configure -Dusedl
+# You can even override some of this with things like:
+#  Configure -Dusedl -Ddlext=so -Ddlsrc=dl_dllload.xs.
 case "$usedl" in
-'') usedl='n' ;;
-esac
-case "$dlext" in
-'') dlext='none' ;;
-esac
-#case "$dlsrc" in
-#'') dlsrc='none' ;;
-#esac
+'')
+    usedl='n' 
+    case "$dlext" in
+    '') dlext='none' ;;
+    esac
+    ;;
+define)
+    case "$useshrplib" in
+    '') useshrplib='true' ;;
+    esac
+    case "$dlsrc" in
+    '') dlsrc='dl_dllload.xs' ;;
+    esac
+    # For performance use 'so' at or beyond v2.8, 'dll' for 2.7 and prior versions
+    case "`uname -v`x`uname -r`" in
+    02x0[89].*|02x1[0-9].*|[0-9][3-9]x*) 
+        so='so'
+        case "$dlext" in
+        '') dlext='so' ;;
+        esac
+        ;;
+    *) 
+        so='dll'
+        case "$dlext" in
+        '') dlext='dll' ;;
+        esac
+        ;;
+    esac
+    libperl="libperl.$so"
+    ccflags="$ccflags -D_SHR_ENVIRON -DPERL_EXTERNAL_GLOB -Wc,dll"
+    cccdlflags='-c -Wc,dll,EXPORTALL'
+    # You might add '-Wl,EDIT=NO' to get rid of the symbol
+    # information at the end of the executable (=> smaller binaries).
+    # Do so with -Dldflags='-Wl,EDIT=NO'.
+    case "$ldflags" in
+    '') ldflags='' ;;
+    esac
+    # The following will need to be modified for the installed libperl.x.
+    # The modification to Config.pm is done by the installperl script after the build and test.
+    ccdlflags="-W l,dll `pwd`/libperl.x"
+    lddlflags="-W l,dll `pwd`/libperl.x"
+    ;;
+esac
+# even on static builds using LIBPATH should be OK.
 case "$ldlibpthname" in
 '') ldlibpthname=LIBPATH ;;
 esac
@@ -130,7 +154,14 @@ esac
 # other things.  Unfortunately, cppflags occurs too late to be of 
 # value external to the script.  This may need to be revisited 
 # under a compiler other than c89.
+case "$usedl" in
+define)
+echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -D_SHR_ENVIRON -E -Wc,NOLOC ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
+    ;;
+*)
 echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -E -Wc,NOLOC ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
+    ;;
+esac
 
 #
 # Note that Makefile.SH employs a bare yacc command to generate