This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate:
[perl5.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 # Cannot have 32000K stack: get SYS0170  ?!
135 if [ $emxcrtrev -ge 50 ]; then 
136     aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000'
137 else
138     aout_ldflags='-Zexe -Zstack 16000'
139 fi
140
141 # To get into config.sh:
142 aout_ldflags="$aout_ldflags"
143
144 aout_d_fork='define'
145 aout_ccflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev"
146 aout_cppflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev"
147 aout_use_clib='c'
148 aout_usedl='undef'
149 aout_archobjs="os2.o dl_os2.o"
150 # Not listed in dynamic_ext, but needed for AOUT static_ext nevertheless
151 aout_extra_static_ext="OS2::DLL"
152
153 # variable which have different values for aout compile
154 used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags'
155
156 if [ "$emxaout" != "" ]; then
157     d_shrplib="$aout_d_shrplib"
158     useshrplib="$aout_useshrplib"
159     obj_ext="$aout_obj_ext"
160     lib_ext="$aout_lib_ext"
161     ar="$aout_ar"
162     plibext="$aout_plibext"
163     if [ $emxcrtrev -lt 50 ]; then 
164         d_fork="$aout_d_fork"
165     fi
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"
172 else
173     d_shrplib='define'
174     useshrplib='true'
175     obj_ext='.obj'
176     lib_ext='.lib'
177     ar='emxomfar'
178     plibext='.lib'
179     if [ $emxcrtrev -ge 50 ]; then 
180         d_fork='define'
181     else
182         d_fork='undef'
183     fi
184     lddlflags="-Zdll -Zomf -Zmt -Zcrtdll -Zlinker /e:2"
185     # Recursive regmatch may eat 2.5M of stack alone.
186     ldflags='-Zexe -Zomf -Zmt -Zcrtdll -Zstack 32000 -Zlinker /e:2'
187     if [ $emxcrtrev -ge 50 ]; then 
188         ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. $_defemxcrtrev"
189     else
190         ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. -DEMX_BAD_SBRK $_defemxcrtrev"
191     fi
192     use_clib='c_import'
193     usedl='define'
194 fi
195
196 # indented to miss config.sh
197   _ar="$ar"
198
199 # To get into config.sh (should start at the beginning of line)
200 # or you can put it into config.over.
201 plibext="$plibext"
202 # plibext is not needed anymore.  Just directly set $libperl.
203 libperl="libperl${plibext}"
204
205 #libc="/emx/lib/st/c_import$lib_ext"
206 libc="$libemx/mt/$use_clib$lib_ext"
207
208 if test -r "$libemx/c_alias$lib_ext"; then 
209     libnames="$libemx/c_alias$lib_ext"
210 fi
211 # otherwise puts -lc ???
212
213 # [Maybe we should just remove c from $libswanted ?]
214
215 # Test would pick up wrong rand, so we hardwire the value for random()
216 libs='-lsocket -lm -lbsd'
217 randbits=31
218 archobjs="os2$obj_ext dl_os2$obj_ext"
219
220 # Run files without extension with sh:
221 EXECSHELL=sh
222
223 cccdlflags='-Zdll'
224 dlsrc='dl_dlopen.xs'
225 ld='gcc'
226
227 #cppflags='-DDOSISH -DOS2=2 -DEMBED -I.'
228
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
232 stdstdunder=`echo "#include <stdio.h>" | cpp | egrep -c "char +\* +_ptr"`
233 d_stdstdio='define'
234 d_stdiobase='define'
235 d_stdio_ptr_lval='define'
236 d_stdio_cnt_lval='define'
237
238 if 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'
245 else
246   stdio_ptr='((fp)->_ptr)'
247   stdio_cnt='((fp)->_rcount)'
248   stdio_base='((fp)->_buffer)'
249   stdio_bufsiz='((fp)->_rcount + (fp)->_ptr - (fp)->_buffer)'
250 fi
251
252 # to put into config.sh
253 myttyname="$myttyname"
254
255 # To have manpages installed
256 nroff='nroff.cmd'
257 # above will be overwritten otherwise, indented to avoid config.sh
258   _nroff='nroff.cmd'
259
260 # should be handled automatically by Configure now.
261 ln='cp'
262 # Will be rewritten otherwise, indented to not put in config.sh
263   _ln='cp'
264 lns='cp'
265
266 nm_opt='-p'
267
268 ####### We define these functions ourselves
269
270 d_strtoll='define'
271 d_strtoull='define'
272 d_getprior='define'
273 d_setprior='define'
274 d_usleep='define'
275 d_usleepproto='define'
276
277 # The next two are commented. pdksh handles #!, extproc gives no path part.
278 # sharpbang='extproc '
279 # shsharp='false'
280
281 # Commented:
282 #startsh='extproc ksh\\n#! sh'
283
284 # Find patch:
285 gnupatch='patch'
286 if (gnupatch -v || gnupatch --version)   2>&1 >/dev/null; then
287     gnupatch=gnupatch
288 else
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
297 fi
298
299 for 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
303 done
304 if test -z "$pager"; then
305   pager='cmd /c more'
306 fi
307
308 # Apply patches if needed
309 case "$0$running_c_cmd" in
310   *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd
311     if test "Xyes" = "X$configure_cmd_loop"; then
312         cat <<EOC >&2
313 !!!
314 !!! PANIC: Loop of self-invocations detected, aborting!
315 !!!
316 EOC
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
329         # Not patched!
330         # Restore the initial command line arguments
331         if test -f ./Configure.cmd ; then
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 !!!
348 EOC
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
362             exit 2
363         fi
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
370 EOC
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
380         ($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2
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 !!!
386 EOC
387         echo "extproc sh" > Configure.ctm
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 !!!
395 EOC
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
409     else
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
415     fi 
416     ;;
417   *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2
418 esac
419
420 # This script UU/usethreads.cbu will get 'called-back' by Configure 
421 # after it has prompted the user for whether to use threads.
422 cat > UU/usethreads.cbu <<'EOCBU'
423 case "$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         ;;
432 esac
433 EOCBU
434
435 if 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
445 fi
446 if test -n "$cryptlib"; then
447         libs="$libs $cryptlib"
448         # d_crypt=define
449 fi
450
451 # Now install the external modules. We are in the ./hints directory.
452
453 cd ./os2/OS2
454
455 if ! test -d ../../ext/OS2 ; then
456    mkdir ../../ext/OS2
457 fi
458
459 cp -rfu * ../../ext/OS2/
460
461 # Install tests:
462
463 cp -uf ../*.t ../../t/lib
464 for 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
478 done
479
480 case "$ldlibpthname" in
481 '') ldlibpthname=none ;;
482 esac
483
484 # Now go back
485 cd ../..
486 cp os2/*.t t/lib