xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/writemain.SH (revision 0:68f95e015346)
1case $PERL_CONFIG_SH in
2'')
3	if test -f config.sh; then TOP=.;
4	elif test -f ../config.sh; then TOP=..;
5	elif test -f ../../config.sh; then TOP=../..;
6	elif test -f ../../../config.sh; then TOP=../../..;
7	elif test -f ../../../../config.sh; then TOP=../../../..;
8	else
9		echo "Can't find config.sh."; exit 1
10	fi
11	. $TOP/config.sh
12	;;
13esac
14: This forces SH files to create target in same directory as SH file.
15: This is so that make depend always knows where to find SH derivatives.
16case "$0" in
17*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
18esac
19echo "Extracting writemain (with variable substitutions)"
20: This section of the file will have variable substitutions done on it.
21: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
22: Protect any dollar signs and backticks that you do not want interpreted
23: by putting a backslash in front.  You may delete these comments.
24rm -f writemain
25$spitshell >writemain <<!GROK!THIS!
26$startsh
27!GROK!THIS!
28
29: In the following dollars and backticks do not need the extra backslash.
30$spitshell >>writemain <<'!NO!SUBS!'
31# This script takes the plain miniperlmain.c and writes out perlmain.c
32# which includes all the extensions.
33# The command line arguments name extensions to be used.
34#  E.g.:  sh writemain SDBM_File POSIX > perlmain.c
35#
36
37orig="$*"
38args=''
39: Remove any .a suffixes and any leading path components
40for file in $orig ; do
41        case "$file" in
42           *.a)  file=`echo $file | sed 's/\.a//g'`
43                 ;;
44        esac
45	case "$file" in
46	ext/*)	file=`echo $file | sed 's:ext/\(.*\)/[^/]*:\1:'`
47		;;
48	lib/auto/*)	file=`echo $file | sed 's:lib/auto/\(.*\)/[^/]*:\1:'`
49		;;
50	*/*)
51		file=`expr X$file : 'X.*/\(.*\)'`
52		;;
53	esac
54	args="$args $file"
55done
56
57
58sed '/Do not delete this line--writemain depends on it/q' miniperlmain.c
59
60
61if test X"$args" != "X" ; then
62    for ext in $args ; do
63: $ext will either be 'Name' or 'Name1/Name2' etc
64: convert ext into cname and mname
65mname=`echo $ext   | sed 's!/!::!g'`
66cname=`echo $mname | sed 's!:!_!g'`
67
68echo "EXTERN_C void boot_${cname} (pTHX_ CV* cv);"
69    done
70fi
71
72cat << 'EOP'
73
74static void
75xs_init(pTHX)
76{
77EOP
78
79if test X"$args" != "X" ; then
80    echo "    char *file = __FILE__;"
81    echo "    dXSUB_SYS;"
82
83    ai=''
84
85    for ext in $args ; do
86
87	: $ext will either be 'Name' or 'Name1/Name2' etc
88	: convert ext into cname and mname
89	mname=`echo $ext   | sed 's!/!::!g'`
90	cname=`echo $mname | sed 's!:!_!g'`
91
92	if test "$ext" = "DynaLoader"; then
93	    : Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
94	    : boot_DynaLoader is called directly in DynaLoader.pm
95	    echo "        newXS(\"${mname}::boot_${ext}\", boot_${cname}, file);"
96	else
97	    echo "        newXS(\"${mname}::bootstrap\", boot_${cname}, file);"
98	fi
99    done
100fi
101
102cat << 'EOP'
103}
104EOP
105
106!NO!SUBS!
107chmod 755 writemain
108$eunicefix writemain
109