summaryrefslogtreecommitdiff
path: root/writemain.SH
diff options
context:
space:
mode:
authorLarry Wall <lwall@netlabs.com>1994-10-17 23:00:00 +0000
committerLarry Wall <lwall@netlabs.com>1994-10-17 23:00:00 +0000
commita0d0e21ea6ea90a22318550944fe6cb09ae10cda (patch)
treefaca1018149b736b1142f487e44d1ff2de5cc1fa /writemain.SH
parent85e6fe838fb25b257a1b363debf8691c0992ef71 (diff)
downloadperl-a0d0e21ea6ea90a22318550944fe6cb09ae10cda.tar.gz
perl 5.000perl-5.000
[editor's note: this commit combines approximate 4 months of furious releases of Andy Dougherty and Larry Wall - see pod/perlhist.pod for details. Andy notes that; Alas neither my "Irwin AccuTrack" nor my DC 600A quarter-inch cartridge backup tapes from that era seem to be readable anymore. I guess 13 years exceeds the shelf life for that backup technology :-(. ]
Diffstat (limited to 'writemain.SH')
-rw-r--r--writemain.SH77
1 files changed, 58 insertions, 19 deletions
diff --git a/writemain.SH b/writemain.SH
index ea8aeabbd2..d7511e8429 100644
--- a/writemain.SH
+++ b/writemain.SH
@@ -27,29 +27,68 @@ $startsh
: In the following dollars and backticks do not need the extra backslash.
$spitshell >>writemain <<'!NO!SUBS!'
-: This script takes the plain miniperlmain.c and writes out perlmain.c
-: which includes all the extensions.
-: The command line arguments name extensions to be used.
-: E.g.: sh writemain SDBM_File POSIX > perlmain.c
-:
-args="$*"
-if test X"$args" = "X" ; then
- cat miniperlmain.c
-else
- sed '/Do not delete this line--writemain depends on it/q' miniperlmain.c
- cat << 'EOP'
-
-#ifdef USE_DYNAMIC_LOADING
- boot_DynamicLoader();
-#endif
+# This script takes the plain miniperlmain.c and writes out perlmain.c
+# which includes all the extensions.
+# The command line arguments name extensions to be used.
+# E.g.: sh writemain SDBM_File POSIX > perlmain.c
+#
-EOP
- for ext in $args; do
- echo " newXSUB(\"${ext}::bootstrap\", 0, boot_${ext}, file);"
+orig="$*"
+args=''
+: Remove any .a suffixes and any leading path components
+for file in `echo $orig | sed 's/\.a//g'` ; do
+ case "$file" in
+ ext/*) file=`echo $file | sed 's:ext/\(.*\)/[^/]*:\1:'`
+ ;;
+ */*)
+ file=`expr X$file : 'X.*/\(.*\)'`
+ ;;
+ esac
+ args="$args $file"
+done
+
+
+sed '/Do not delete this line--writemain depends on it/q' miniperlmain.c
+if test X"$args" != "X" ; then
+ echo " char *file = __FILE__;"
+ ai=''
+
+ for ext in $args ; do
+
+ : $ext will either be 'Name' or 'Name1/Name2' etc
+ : convert ext into cname and mname
+ mname=`echo $ext | sed 's!/!::!g'`
+ cname=`echo $mname | sed 's!:!_!g'`
+
+ echo " { extern void boot_${cname} _((CV* cv));"
+ if test "$ext" = "DynaLoader"; then
+ : Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
+ : boot_DynaLoader is called directly in DynaLoader.pm
+ echo " newXS(\"${mname}::boot_${ext}\", boot_${cname}, file);"
+ else
+ echo " newXS(\"${mname}::bootstrap\", boot_${cname}, file);"
+ fi
+ # does this extension wish to supply automatic booting code?
+ for aifile in ext/$ext/AutoInit.* ; do
+ case $aifile in
+ *.c)echo " /* autoinit code from $aifile follows: */"
+ echo " {"; cat $aifile; echo " }"
+ ;;
+ *.pl) ai="$ai `cat $aifile | tr '\012' ' '`;"
+ ;;
+ esac
+ done
+ echo " }"
done
- echo '}'
+ if test "X$ai" != "X"; then
+ echo " autoboot_preamble = \"BEGIN { $ai }\";"
+ fi
fi
+cat << 'EOP'
+}
+EOP
+
!NO!SUBS!
chmod 755 writemain
$eunicefix writemain