This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Ticket number for bitops in perlexperiment
[perl5.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
1973dd96 7# Andy Dougherty <doughera@lafayette.edu>
9a5ea778 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
IZ
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
GS
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
IZ
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
IZ
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
IZ
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
IZ
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
IZ
63fi
64
65if test ! -d "$libemx"; then
66 libemx="$emxpath/lib"
67fi
84902520
TB
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
TB
73 fi
74fi
75
f3e7aa1b
IZ
76if test ! -d "$usrinc"; then
77 if test -d "$emxpath/include"; then
78 usrinc="$emxpath/include"
84902520 79 else
f3e7aa1b
IZ
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
TB
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
IZ
98# indented to not put it into config.sh
99 _defemxcrtrev=-D_EMX_CRT_REV_=$emxcrtrev
4633a7c4
LW
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
IZ
111# The default one uses exponential notation between 0.0001 and 0.1
112d_Gconvert='gcvt_os2((x),(n),(b))'
113
aade5aff
YST
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
37286744
IZ
123# -Zomf build has a problem with _exit() *flushing*, so the test
124# gets confused:
125fflushNULL="define"
126
cf8a192d 127aout_d_shrplib='undef'
31e507d9 128aout_useshrplib='false'
cf8a192d 129aout_obj_ext='.o'
130aout_lib_ext='.a'
131aout_ar='ar'
132aout_plibext='.a'
491527d0 133aout_lddlflags="-Zdll $ld_dll_optimize"
1933e12c
IZ
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
017f25f1 138# Cannot have 32000K stack: get SYS0170 ?!
26a1e0bd 139if [ $emxcrtrev -ge 50 ]; then
1933e12c 140 aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000 -D__ST_MT_ERRNO__'
26a1e0bd 141else
1933e12c 142 aout_ldflags='-Zexe -Zstack 16000 -D__ST_MT_ERRNO__'
26a1e0bd
IZ
143fi
144
145# To get into config.sh:
146aout_ldflags="$aout_ldflags"
147
148aout_d_fork='define'
1933e12c
IZ
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__"
cf8a192d 151aout_use_clib='c'
152aout_usedl='undef'
153aout_archobjs="os2.o dl_os2.o"
b732e2e2
IZ
154# Not listed in dynamic_ext, but needed for AOUT static_ext nevertheless
155aout_extra_static_ext="OS2::DLL"
cf8a192d 156
157# variable which have different values for aout compile
31e507d9 158used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags'
cf8a192d 159
eacfb5f1 160if [ "$emxaout" != "" ]; then
cf8a192d 161 d_shrplib="$aout_d_shrplib"
31e507d9 162 useshrplib="$aout_useshrplib"
cf8a192d 163 obj_ext="$aout_obj_ext"
164 lib_ext="$aout_lib_ext"
165 ar="$aout_ar"
166 plibext="$aout_plibext"
26a1e0bd
IZ
167 if [ $emxcrtrev -lt 50 ]; then
168 d_fork="$aout_d_fork"
169 fi
cf8a192d 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"
eacfb5f1 176else
177 d_shrplib='define'
31e507d9 178 useshrplib='true'
eacfb5f1 179 obj_ext='.obj'
180 lib_ext='.lib'
181 ar='emxomfar'
182 plibext='.lib'
26a1e0bd
IZ
183 if [ $emxcrtrev -ge 50 ]; then
184 d_fork='define'
185 else
186 d_fork='undef'
187 fi
f07bc2fb 188 lddlflags="-Zdll -Zomf -Zmt -Zcrtdll -Zlinker /e:2"
4bf4dbb3 189 # Recursive regmatch may eat 2.5M of stack alone.
515b656f 190 ldflags='-Zexe -Zomf -Zmt -Zcrtdll -Zstack 32000 -Zlinker /e:2'
26a1e0bd 191 if [ $emxcrtrev -ge 50 ]; then
ed344e4f 192 ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. $_defemxcrtrev"
26a1e0bd 193 else
ed344e4f 194 ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. -DEMX_BAD_SBRK $_defemxcrtrev"
26a1e0bd 195 fi
eacfb5f1 196 use_clib='c_import'
cf8a192d 197 usedl='define'
eacfb5f1 198fi
199
9b8c873d
IZ
200# indented to miss config.sh
201 _ar="$ar"
202
eacfb5f1 203# To get into config.sh (should start at the beginning of line)
9a5ea778 204# or you can put it into config.over.
eacfb5f1 205plibext="$plibext"
31e507d9 206# plibext is not needed anymore. Just directly set $libperl.
207libperl="libperl${plibext}"
eacfb5f1 208
209#libc="/emx/lib/st/c_import$lib_ext"
26a1e0bd 210libc="$libemx/mt/$use_clib$lib_ext"
eacfb5f1 211
212if test -r "$libemx/c_alias$lib_ext"; then
213 libnames="$libemx/c_alias$lib_ext"
214fi
4633a7c4
LW
215# otherwise puts -lc ???
216
9a5ea778 217# [Maybe we should just remove c from $libswanted ?]
218
44a8e56a 219# Test would pick up wrong rand, so we hardwire the value for random()
220libs='-lsocket -lm -lbsd'
221randbits=31
cf8a192d 222archobjs="os2$obj_ext dl_os2$obj_ext"
4633a7c4 223
487a7f01 224# Run files without extension with sh:
eacfb5f1 225EXECSHELL=sh
4633a7c4
LW
226
227cccdlflags='-Zdll'
cf8a192d 228dlsrc='dl_dlopen.xs'
4633a7c4 229ld='gcc'
eacfb5f1 230
231#cppflags='-DDOSISH -DOS2=2 -DEMBED -I.'
4633a7c4 232
4633a7c4
LW
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
eacfb5f1 236stdstdunder=`echo "#include <stdio.h>" | cpp | egrep -c "char +\* +_ptr"`
4633a7c4
LW
237d_stdstdio='define'
238d_stdiobase='define'
239d_stdio_ptr_lval='define'
240d_stdio_cnt_lval='define'
4633a7c4 241
eacfb5f1 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
31e507d9 264# should be handled automatically by Configure now.
eacfb5f1 265ln='cp'
266# Will be rewritten otherwise, indented to not put in config.sh
267 _ln='cp'
268lns='cp'
269
270nm_opt='-p'
271
cf8a192d 272####### We define these functions ourselves
4633a7c4 273
e75931a7
YST
274d_strtoll='define'
275d_strtoull='define'
cf8a192d 276d_getprior='define'
277d_setprior='define'
622913ab
IZ
278d_usleep='define'
279d_usleepproto='define'
cf8a192d 280
84902520 281# The next two are commented. pdksh handles #!, extproc gives no path part.
4633a7c4
LW
282# sharpbang='extproc '
283# shsharp='false'
284
285# Commented:
286#startsh='extproc ksh\\n#! sh'
760ac839 287
d6a255e6
IZ
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
a64c954a
IZ
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
d6a255e6
IZ
312# Apply patches if needed
313case "$0$running_c_cmd" in
314 *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd
ee45ea83
IZ
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
d6a255e6 333 # Not patched!
ee45ea83 334 # Restore the initial command line arguments
d6a255e6 335 if test -f ./Configure.cmd ; then
ee45ea83
IZ
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
d6a255e6
IZ
366 exit 2
367 fi
ee45ea83
IZ
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
d6a255e6 384 ($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2
ee45ea83
IZ
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
d6a255e6 391 echo "extproc sh" > Configure.ctm
ee45ea83
IZ
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
d6a255e6 413 else
ee45ea83
IZ
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
d6a255e6
IZ
419 fi
420 ;;
421 *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2
422esac
423
7162771d
JH
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
8dec540c
IZ
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
760ac839
LW
455# Now install the external modules. We are in the ./hints directory.
456
9b8c873d 457cd ./os2/OS2
760ac839 458
354c724e 459cp -rfu * ../../ext/
760ac839
LW
460
461# Install tests:
462
35bc1fdc 463cp -uf ../*.t ../../t/lib
760ac839
LW
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
5cf1d1f1
JH
480case "$ldlibpthname" in
481'') ldlibpthname=none ;;
482esac
483
760ac839 484# Now go back
9b8c873d 485cd ../..
30500b05 486cp os2/*.t t/lib