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