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