Upgrade to PathTools-3.14_01
[perl.git] / hints / os2.sh
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 :-():
15 emxload -m 30 sh.exe ls.exe tr.exe id.exe sed.exe # make.exe 
16 emxload -m 30 grep.exe egrep.exe fgrep.exe cat.exe rm.exe mv.exe cp.exe
17 emxload -m 30 uniq.exe basename.exe sort.exe awk.exe echo.exe
18
19 path_sep=\;
20
21 if test -f $sh.exe; then sh=$sh.exe; fi
22
23 startsh="#!$sh"
24 cc='gcc'
25
26 # Make denser object files and DLL
27 case "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         ;;
32 esac
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
50 usrinc="`./UU/loc stdlib.h /emx/include $usrinc`"
51 usrinc="`dirname $usrinc | tr '\\\' '/'`"
52 libemx="`dirname $libemx | tr '\\\' '/'`"
53
54 if test -d $tryman/man1; then
55   sysman="$tryman/man1"
56 else
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`"
58 fi
59
60 emxpath="`dirname $libemx`"
61 if test ! -d "$emxpath"; then 
62   emxpath="`./UU/loc . /emx c:/emx d:/emx e:/emx f:/emx g:/emx h:/emx /emx`"
63 fi
64
65 if test ! -d "$libemx"; then 
66   libemx="$emxpath/lib"
67 fi
68 if 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
74 fi
75
76 if 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
86 fi
87
88 rsx="`./UU/loc rsx.exe undef $pth`"
89
90 if test "$libemx" = "X"; then echo "Cannot find C library!" >&2; fi
91
92 # Acute backslashitis:
93 libpth="`echo \"$LIBRARY_PATH\" | tr ';\\\' ' /'`"
94 libpth="$libpth $libemx/mt $libemx"
95
96 set `cmd /c emxrev -f emxlibcm`
97 emxcrtrev=$5
98 # indented to not put it into config.sh
99   _defemxcrtrev=-D_EMX_CRT_REV_=$emxcrtrev
100
101 so='dll'
102
103 # Additional definitions:
104
105 firstmakefile='GNUmakefile'
106 exe_ext='.exe'
107
108 # We provide it
109 i_dlfcn='define'
110
111 # The default one uses exponential notation between 0.0001 and 0.1
112 d_Gconvert='gcvt_os2((x),(n),(b))'
113
114 cat > 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.
118 case "$uselongdouble:$d_longdbl:$d_sqrtl:$d_modfl" in
119 "$define:$define:$define:$define") d_Gconvert='' ;;
120 esac
121 EOCBU
122
123 # -Zomf build has a problem with _exit() *flushing*, so the test
124 # gets confused:
125 fflushNULL="define"
126
127 aout_d_shrplib='undef'
128 aout_useshrplib='false'
129 aout_obj_ext='.o'
130 aout_lib_ext='.a'
131 aout_ar='ar'
132 aout_plibext='.a'
133 aout_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  ?!
139 if [ $emxcrtrev -ge 50 ]; then 
140     aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000 -D__ST_MT_ERRNO__'
141 else
142     aout_ldflags='-Zexe -Zstack 16000 -D__ST_MT_ERRNO__'
143 fi
144
145 # To get into config.sh:
146 aout_ldflags="$aout_ldflags"
147
148 aout_d_fork='define'
149 aout_ccflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev -D__ST_MT_ERRNO__"
150 aout_cppflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev -D__ST_MT_ERRNO__"
151 aout_use_clib='c'
152 aout_usedl='undef'
153 aout_archobjs="os2.o dl_os2.o"
154 # Not listed in dynamic_ext, but needed for AOUT static_ext nevertheless
155 aout_extra_static_ext="OS2::DLL"
156
157 # variable which have different values for aout compile
158 used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags'
159
160 if [ "$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"
176 else
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'
198 fi
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.
205 plibext="$plibext"
206 # plibext is not needed anymore.  Just directly set $libperl.
207 libperl="libperl${plibext}"
208
209 #libc="/emx/lib/st/c_import$lib_ext"
210 libc="$libemx/mt/$use_clib$lib_ext"
211
212 if test -r "$libemx/c_alias$lib_ext"; then 
213     libnames="$libemx/c_alias$lib_ext"
214 fi
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()
220 libs='-lsocket -lm -lbsd'
221 randbits=31
222 archobjs="os2$obj_ext dl_os2$obj_ext"
223
224 # Run files without extension with sh:
225 EXECSHELL=sh
226
227 cccdlflags='-Zdll'
228 dlsrc='dl_dlopen.xs'
229 ld='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
236 stdstdunder=`echo "#include <stdio.h>" | cpp | egrep -c "char +\* +_ptr"`
237 d_stdstdio='define'
238 d_stdiobase='define'
239 d_stdio_ptr_lval='define'
240 d_stdio_cnt_lval='define'
241
242 if 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'
249 else
250   stdio_ptr='((fp)->_ptr)'
251   stdio_cnt='((fp)->_rcount)'
252   stdio_base='((fp)->_buffer)'
253   stdio_bufsiz='((fp)->_rcount + (fp)->_ptr - (fp)->_buffer)'
254 fi
255
256 # to put into config.sh
257 myttyname="$myttyname"
258
259 # To have manpages installed
260 nroff='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.
265 ln='cp'
266 # Will be rewritten otherwise, indented to not put in config.sh
267   _ln='cp'
268 lns='cp'
269
270 nm_opt='-p'
271
272 ####### We define these functions ourselves
273
274 d_strtoll='define'
275 d_strtoull='define'
276 d_getprior='define'
277 d_setprior='define'
278 d_usleep='define'
279 d_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:
289 gnupatch='patch'
290 if (gnupatch -v || gnupatch --version)   2>&1 >/dev/null; then
291     gnupatch=gnupatch
292 else
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
301 fi
302
303 for 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
307 done
308 if test -z "$pager"; then
309   pager='cmd /c more'
310 fi
311
312 # Apply patches if needed
313 case "$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 !!!
320 EOC
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 !!!
352 EOC
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
374 EOC
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 !!!
390 EOC
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 !!!
399 EOC
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
422 esac
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.
426 cat > UU/usethreads.cbu <<'EOCBU'
427 case "$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         ;;
436 esac
437 EOCBU
438
439 if 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
449 fi
450 if test -n "$cryptlib"; then
451         libs="$libs $cryptlib"
452         # d_crypt=define
453 fi
454
455 # Now install the external modules. We are in the ./hints directory.
456
457 cd ./os2/OS2
458
459 if ! test -d ../../ext/OS2 ; then
460    mkdir ../../ext/OS2
461 fi
462
463 cp -rfu * ../../ext/OS2/
464
465 # Install tests:
466
467 cp -uf ../*.t ../../t/lib
468 for xxx in * ; do
469         if $test -d $xxx/t; then
470                 cp -uf $xxx/t/*.t ../../t/lib
471         else
472                 if $test -d $xxx; then
473                         cd $xxx
474                         for yyy in * ; do
475                                 if $test -d $yyy/t; then
476                                     cp -uf $yyy/t/*.t ../../t/lib
477                                 fi
478                         done
479                         cd ..
480                 fi
481         fi
482 done
483
484 case "$ldlibpthname" in
485 '') ldlibpthname=none ;;
486 esac
487
488 # Now go back
489 cd ../..
490 cp os2/*.t t/lib