xref: /openbsd/gnu/usr.bin/perl/hints/os2.sh (revision 09467b48)
1#! /bin/sh
2# hints/os2.sh
3# This file reflects the tireless work of
4# Ilya Zakharevich <ilya@math.ohio-state.edu>
5#
6# Trimmed and comments added by
7#     Andy Dougherty  <doughera@lafayette.edu>
8#     Exactly what is required beyond a standard OS/2 installation?
9#     (see in README.os2)
10
11# Note that symbol extraction code gives wrong answers (sometimes?) on
12# gethostent and setsid.
13
14# Optimization (GNU make 3.74 cannot be loaded :-():
15emxload -m 30 sh.exe ls.exe tr.exe id.exe sed.exe # make.exe
16emxload -m 30 grep.exe egrep.exe fgrep.exe cat.exe rm.exe mv.exe cp.exe
17emxload -m 30 uniq.exe basename.exe sort.exe awk.exe echo.exe
18
19path_sep=\;
20
21if test -f $sh.exe; then sh=$sh.exe; fi
22
23startsh="#!$sh"
24cc='gcc'
25
26# Make denser object files and DLL
27case "X$optimize" in
28  X)
29	optimize="-O2 -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -s"
30	ld_dll_optimize="-s"
31	;;
32esac
33
34# Get some standard things (indented to avoid putting in config.sh):
35 oifs="$IFS"
36 IFS=" ;"
37 set $MANPATH
38 tryman="$@"
39 set $LIBRARY_PATH
40 libemx="$@"
41 set $C_INCLUDE_PATH
42 usrinc="$@"
43 IFS="$oifs"
44 tryman="`./UU/loc . /man $tryman`"
45 tryman="`echo $tryman | tr '\\\' '/'`"
46
47 # indented to avoid having it *two* times at start
48 libemx="`./UU/loc os2.a /emx/lib $libemx`"
49
50usrinc="`./UU/loc stdlib.h /emx/include $usrinc`"
51usrinc="`dirname $usrinc | tr '\\\' '/'`"
52libemx="`dirname $libemx | tr '\\\' '/'`"
53
54if test -d $tryman/man1; then
55  sysman="$tryman/man1"
56else
57  sysman="`./UU/loc . /man/man1 c:/man/man1 c:/usr/man/man1 d:/man/man1 d:/usr/man/man1 e:/man/man1 e:/usr/man/man1 f:/man/man1 f:/usr/man/man1 g:/man/man1 g:/usr/man/man1 /usr/man/man1`"
58fi
59
60emxpath="`dirname $libemx`"
61if test ! -d "$emxpath"; then
62  emxpath="`./UU/loc . /emx c:/emx d:/emx e:/emx f:/emx g:/emx h:/emx /emx`"
63fi
64
65if test ! -d "$libemx"; then
66  libemx="$emxpath/lib"
67fi
68if test ! -d "$libemx"; then
69  if test -d "$LIBRARY_PATH"; then
70    libemx="$LIBRARY_PATH"
71  else
72    libemx="`./UU/loc . X c:/emx/lib d:/emx/lib e:/emx/lib f:/emx/lib g:/emx/lib h:/emx/lib /emx/lib`"
73  fi
74fi
75
76if test ! -d "$usrinc"; then
77  if test -d "$emxpath/include"; then
78    usrinc="$emxpath/include"
79  else
80    if test -d "$C_INCLUDE_PATH"; then
81      usrinc="$C_INCLUDE_PATH"
82    else
83      usrinc="`./UU/loc . X c:/emx/include d:/emx/include e:/emx/include f:/emx/include g:/emx/include h:/emx/include /emx/include`"
84    fi
85  fi
86fi
87
88rsx="`./UU/loc rsx.exe undef $pth`"
89
90if test "$libemx" = "X"; then echo "Cannot find C library!" >&2; fi
91
92# Acute backslashitis:
93libpth="`echo \"$LIBRARY_PATH\" | tr ';\\\' ' /'`"
94libpth="$libpth $libemx/mt $libemx"
95
96set `cmd /c emxrev -f emxlibcm`
97emxcrtrev=$5
98# indented to not put it into config.sh
99  _defemxcrtrev=-D_EMX_CRT_REV_=$emxcrtrev
100
101so='dll'
102
103# Additional definitions:
104
105firstmakefile='GNUmakefile'
106exe_ext='.exe'
107
108# We provide it
109i_dlfcn='define'
110
111# The default one uses exponential notation between 0.0001 and 0.1
112d_Gconvert='gcvt_os2((x),(n),(b))'
113
114cat > UU/uselongdouble.cbu <<'EOCBU'
115# This script UU/uselongdouble.cbu will get 'called-back' by Configure
116# after it has prompted the user for whether to use long doubles.
117# If we will use them, let Configure choose us a Gconvert.
118case "$uselongdouble:$d_longdbl:$d_sqrtl:$d_modfl" in
119"$define:$define:$define:$define") d_Gconvert='' ;;
120esac
121EOCBU
122
123# -Zomf build has a problem with _exit() *flushing*, so the test
124# gets confused:
125fflushNULL="define"
126
127aout_d_shrplib='undef'
128aout_useshrplib='false'
129aout_obj_ext='.o'
130aout_lib_ext='.a'
131aout_ar='ar'
132aout_plibext='.a'
133aout_lddlflags="-Zdll $ld_dll_optimize"
134
135# -D__ST_MT_ERRNO__ allows a quick relink with -Zmtd to check problems
136# which may be due to linking with -Zmtd DLLs
137
138# Cannot have 32000K stack: get SYS0170  ?!
139if [ $emxcrtrev -ge 50 ]; then
140    aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000 -D__ST_MT_ERRNO__'
141else
142    aout_ldflags='-Zexe -Zstack 16000 -D__ST_MT_ERRNO__'
143fi
144
145# To get into config.sh:
146aout_ldflags="$aout_ldflags"
147
148aout_d_fork='define'
149aout_ccflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev -D__ST_MT_ERRNO__"
150aout_cppflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev -D__ST_MT_ERRNO__"
151aout_use_clib='c'
152aout_usedl='undef'
153aout_archobjs="os2.o dl_os2.o"
154# Not listed in dynamic_ext, but needed for AOUT static_ext nevertheless
155aout_extra_static_ext="OS2::DLL"
156
157# variable which have different values for aout compile
158used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags'
159
160if [ "$emxaout" != "" ]; then
161    d_shrplib="$aout_d_shrplib"
162    useshrplib="$aout_useshrplib"
163    obj_ext="$aout_obj_ext"
164    lib_ext="$aout_lib_ext"
165    ar="$aout_ar"
166    plibext="$aout_plibext"
167    if [ $emxcrtrev -lt 50 ]; then
168	d_fork="$aout_d_fork"
169    fi
170    lddlflags="$aout_lddlflags"
171    ldflags="$aout_ldflags"
172    ccflags="$aout_ccflags"
173    cppflags="$aout_cppflags"
174    use_clib="$aout_use_clib"
175    usedl="$aout_usedl"
176else
177    d_shrplib='define'
178    useshrplib='true'
179    obj_ext='.obj'
180    lib_ext='.lib'
181    ar='emxomfar'
182    plibext='.lib'
183    if [ $emxcrtrev -ge 50 ]; then
184	d_fork='define'
185    else
186	d_fork='undef'
187    fi
188    lddlflags="-Zdll -Zomf -Zmt -Zcrtdll -Zlinker /e:2"
189    # Recursive regmatch may eat 2.5M of stack alone.
190    ldflags='-Zexe -Zomf -Zmt -Zcrtdll -Zstack 32000 -Zlinker /e:2'
191    if [ $emxcrtrev -ge 50 ]; then
192	ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. $_defemxcrtrev"
193    else
194	ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. -DEMX_BAD_SBRK $_defemxcrtrev"
195    fi
196    use_clib='c_import'
197    usedl='define'
198fi
199
200# indented to miss config.sh
201  _ar="$ar"
202
203# To get into config.sh (should start at the beginning of line)
204# or you can put it into config.over.
205plibext="$plibext"
206# plibext is not needed anymore.  Just directly set $libperl.
207libperl="libperl${plibext}"
208
209#libc="/emx/lib/st/c_import$lib_ext"
210libc="$libemx/mt/$use_clib$lib_ext"
211
212if test -r "$libemx/c_alias$lib_ext"; then
213    libnames="$libemx/c_alias$lib_ext"
214fi
215# otherwise puts -lc ???
216
217# [Maybe we should just remove c from $libswanted ?]
218
219# Test would pick up wrong rand, so we hardwire the value for random()
220libs='-lsocket -lm -lbsd'
221randbits=31
222archobjs="os2$obj_ext dl_os2$obj_ext"
223
224# Run files without extension with sh:
225EXECSHELL=sh
226
227cccdlflags='-Zdll'
228dlsrc='dl_dlopen.xs'
229ld='gcc'
230
231#cppflags='-DDOSISH -DOS2=2 -DEMBED -I.'
232
233# for speedup: (some patches to ungetc are also needed):
234# Note that without this guy tests 8 and 10 of io/tell.t fail, with it 11 fails
235
236stdstdunder=`echo "#include <stdio.h>" | cpp | egrep -c "char +\* +_ptr"`
237d_stdstdio='define'
238d_stdiobase='define'
239d_stdio_ptr_lval='define'
240d_stdio_cnt_lval='define'
241
242if test "$stdstdunder" = 0; then
243  stdio_ptr='((fp)->ptr)'
244  stdio_cnt='((fp)->rcount)'
245  stdio_base='((fp)->buffer)'
246  stdio_bufsiz='((fp)->rcount + (fp)->ptr - (fp)->buffer)'
247  ccflags="$ccflags -DMYTTYNAME"
248  myttyname='define'
249else
250  stdio_ptr='((fp)->_ptr)'
251  stdio_cnt='((fp)->_rcount)'
252  stdio_base='((fp)->_buffer)'
253  stdio_bufsiz='((fp)->_rcount + (fp)->_ptr - (fp)->_buffer)'
254fi
255
256# to put into config.sh
257myttyname="$myttyname"
258
259# To have manpages installed
260nroff='nroff.cmd'
261# above will be overwritten otherwise, indented to avoid config.sh
262  _nroff='nroff.cmd'
263
264# should be handled automatically by Configure now.
265ln='cp'
266# Will be rewritten otherwise, indented to not put in config.sh
267  _ln='cp'
268lns='cp'
269
270nm_opt='-p'
271
272####### We define these functions ourselves
273
274d_strtoll='define'
275d_strtoull='define'
276d_getprior='define'
277d_setprior='define'
278d_usleep='define'
279d_usleepproto='define'
280
281# The next two are commented. pdksh handles #!, extproc gives no path part.
282# sharpbang='extproc '
283# shsharp='false'
284
285# Commented:
286#startsh='extproc ksh\\n#! sh'
287
288# Find patch:
289gnupatch='patch'
290if (gnupatch -v || gnupatch --version)   2>&1 >/dev/null; then
291    gnupatch=gnupatch
292else
293    if (gpatch -v || gpatch --version)   2>&1 >/dev/null; then
294	gnupatch=gpatch
295    else
296	# They may have a special PATH during configuring
297	if (patch -v || patch --version) 2>&1 >/dev/null; then
298	    gnupatch="`./UU/loc patch.exe undef $pth`"
299	fi
300    fi
301fi
302
303for f in less.exe less.sh less.ksh less.cmd more.exe more.sh more.ksh more.cmd ; do
304  if test -z "$pager"; then
305    pager="`./UU/loc $f '' $pth`"
306  fi
307done
308if test -z "$pager"; then
309  pager='cmd /c more'
310fi
311
312# Apply patches if needed
313case "$0$running_c_cmd" in
314  *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd
315    if test "Xyes" = "X$configure_cmd_loop"; then
316	cat <<EOC >&2
317!!!
318!!! PANIC: Loop of self-invocations detected, aborting!
319!!!
320EOC
321	exit 20
322    fi
323    configure_cmd_loop=yes
324    export configure_cmd_loop
325
326    configure_needs_patch=''
327    if test -s ./os2/diff.configure; then
328	if ! grep "^#OS2-PATCH-APPLIED" ./Configure > /dev/null; then
329	    configure_needs_patch=yes
330	fi
331    fi
332    if test -n "$configure_needs_patch"; then
333	# Not patched!
334	# Restore the initial command line arguments
335	if test -f ./Configure.cmd ; then
336	    cat <<EOC >&2
337!!!
338!!! I see that what is running is ./Configure.
339!!! ./Configure is not patched, but ./Configure.cmd exists.
340!!!
341!!! You are supposed to run Configure.cmd, not Configure
342!!!  after an automagic patching.
343!!!
344!!! If you insist on running Configure, you may
345!!!  patch it manually from ./os2/diff.configure.
346!!!
347!!! However, I went through incredible hoolahoops, and I expect I can
348!!!  auto-restart Configure.cmd myself.  I will start it with arguments:
349!!!
350!!!    Configure.cmd $args_exp
351!!!
352EOC
353	    rp='Do you want to auto-restart Configure.cmd?'
354	    dflt='y'
355	    . UU/myread
356	    case "$ans" in
357		[yY]) echo >&4 "Okay, continuing." ;;
358		*) echo >&4 "Okay, bye."
359		   exit 2
360		   ;;
361	    esac
362	    eval "set X $args_exp";
363	    shift;
364	    # Restore the output
365	    exec Configure.cmd "$@" 1>&2
366	    exit 2
367	fi
368	cat <<EOC >&2
369!!!
370!!! You did not patch ./Configure!
371!!! I can create Configure.cmd and patch it from ./os2/diff.configure with the command
372!!!
373!!!   $gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch
374EOC
375	rp='Do you want to auto-patch Configure to Configure.cmd?'
376	dflt='y'
377	. UU/myread
378	case "$ans" in
379		[yY]) echo >&4 "Okay, continuing." ;;
380		*) echo >&4 "Okay, bye."
381		   exit 2
382		   ;;
383	esac
384	($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2
385	cat <<EOC >&2
386!!!
387!!! The report of patching is copied to 00_auto_patch.
388!!! Now we need to restart Configure.cmd with all the options.
389!!!
390EOC
391	echo "extproc sh" > Configure.ctm
392	( cat Configure.cmd >> Configure.ctm && mv -f Configure.ctm Configure.cmd ) || (echo "!!! Failure to add extproc-line to Configure.cmd." >&2 ; exit 21)
393	cat <<EOC >&2
394!!! I went through incredible hoolahoops, and I expect I can
395!!!  auto-restart Configure.cmd myself.  I will start it with arguments:
396!!!
397!!!    Configure.cmd $args_exp
398!!!
399EOC
400	rp='Do you want to auto-restart Configure.cmd?'
401	dflt='y'
402	. UU/myread
403	case "$ans" in
404		[yY]) echo >&4 "Okay, continuing." ;;
405		*) echo >&4 "Okay, bye."
406		   exit 2
407		   ;;
408	esac
409	eval "set X $args_exp";
410	shift;
411	exec Configure.cmd "$@" 1>&2
412	exit 2
413    else
414	if test -s ./os2/diff.configure; then
415	    echo "!!! Apparently we are running a patched Configure." >&2
416	else
417	    echo "!!! Apparently there is no need to patch Configure." >&2
418	fi
419    fi
420    ;;
421  *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2
422esac
423
424# This script UU/usethreads.cbu will get 'called-back' by Configure
425# after it has prompted the user for whether to use threads.
426cat > UU/usethreads.cbu <<'EOCBU'
427case "$usethreads" in
428$define|true|[yY]*)
429	ccflags="-Zmt $ccflags"
430        cppflags="-Zmt $cppflags"  # Do we really need to set this?
431        aout_ccflags="-DUSE_THREADS $aout_ccflags"
432        aout_cppflags="-DUSE_THREADS $aout_cppflags"
433        aout_lddlflags="-Zmt $aout_lddlflags"
434        aout_ldflags="-Zmt $aout_ldflags"
435	;;
436esac
437EOCBU
438
439if test -z "$cryptlib"; then
440	cryptlib=`UU/loc crypt$lib_ext "" $libpth`
441	if $test -n "$cryptlib"; then
442		cryptlib=-lcrypt
443	else
444		cryptlib=`UU/loc ufc$lib_ext "" $libpth`
445		if $test -n "$cryptlib"; then
446			cryptlib=-lufc
447		fi
448	fi
449fi
450if test -n "$cryptlib"; then
451	libs="$libs $cryptlib"
452	# d_crypt=define
453fi
454
455# Now install the external modules. We are in the ./hints directory.
456
457cd ./os2/OS2
458
459cp -rfu * ../../ext/
460
461# Install tests:
462
463cp -uf ../*.t ../../t/lib
464for xxx in * ; do
465	if $test -d $xxx/t; then
466		cp -uf $xxx/t/*.t ../../t/lib
467	else
468		if $test -d $xxx; then
469			cd $xxx
470			for yyy in * ; do
471				if $test -d $yyy/t; then
472				    cp -uf $yyy/t/*.t ../../t/lib
473				fi
474			done
475			cd ..
476		fi
477	fi
478done
479
480case "$ldlibpthname" in
481'') ldlibpthname=none ;;
482esac
483
484# Now go back
485cd ../..
486cp os2/*.t t/lib
487