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