This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate perlio:
[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@lafcol.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 # -Zomf build has a problem with _exit() *flushing*, so the test
112 # gets confused:
113 fflushNULL="define"
114
115 aout_d_shrplib='undef'
116 aout_useshrplib='false'
117 aout_obj_ext='.o'
118 aout_lib_ext='.a'
119 aout_ar='ar'
120 aout_plibext='.a'
121 aout_lddlflags="-Zdll $ld_dll_optimize"
122 # Cannot have 32000K stack: get SYS0170  ?!
123 if [ $emxcrtrev -ge 50 ]; then 
124     aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000'
125 else
126     aout_ldflags='-Zexe -Zstack 16000'
127 fi
128
129 # To get into config.sh:
130 aout_ldflags="$aout_ldflags"
131
132 aout_d_fork='define'
133 aout_ccflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev"
134 aout_cppflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev"
135 aout_use_clib='c'
136 aout_usedl='undef'
137 aout_archobjs="os2.o dl_os2.o"
138 # Not listed in dynamic_ext, but needed for AOUT static_ext nevertheless
139 aout_extra_static_ext="OS2::DLL"
140
141 # variable which have different values for aout compile
142 used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags'
143
144 if [ "$emxaout" != "" ]; then
145     d_shrplib="$aout_d_shrplib"
146     useshrplib="$aout_useshrplib"
147     obj_ext="$aout_obj_ext"
148     lib_ext="$aout_lib_ext"
149     ar="$aout_ar"
150     plibext="$aout_plibext"
151     if [ $emxcrtrev -lt 50 ]; then 
152         d_fork="$aout_d_fork"
153     fi
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"
160 else
161     d_shrplib='define'
162     useshrplib='true'
163     obj_ext='.obj'
164     lib_ext='.lib'
165     ar='emxomfar'
166     plibext='.lib'
167     if [ $emxcrtrev -ge 50 ]; then 
168         d_fork='define'
169     else
170         d_fork='undef'
171     fi
172     lddlflags="-Zdll -Zomf -Zmt -Zcrtdll -Zlinker /e:2"
173     # Recursive regmatch may eat 2.5M of stack alone.
174     ldflags='-Zexe -Zomf -Zmt -Zcrtdll -Zstack 32000 -Zlinker /e:2'
175     if [ $emxcrtrev -ge 50 ]; then 
176         ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. $_defemxcrtrev"
177     else
178         ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. -DEMX_BAD_SBRK $_defemxcrtrev"
179     fi
180     use_clib='c_import'
181     usedl='define'
182 fi
183
184 # indented to miss config.sh
185   _ar="$ar"
186
187 # To get into config.sh (should start at the beginning of line)
188 # or you can put it into config.over.
189 plibext="$plibext"
190 # plibext is not needed anymore.  Just directly set $libperl.
191 libperl="libperl${plibext}"
192
193 #libc="/emx/lib/st/c_import$lib_ext"
194 libc="$libemx/mt/$use_clib$lib_ext"
195
196 if test -r "$libemx/c_alias$lib_ext"; then 
197     libnames="$libemx/c_alias$lib_ext"
198 fi
199 # otherwise puts -lc ???
200
201 # [Maybe we should just remove c from $libswanted ?]
202
203 # Test would pick up wrong rand, so we hardwire the value for random()
204 libs='-lsocket -lm -lbsd'
205 randbits=31
206 archobjs="os2$obj_ext dl_os2$obj_ext"
207
208 # Run files without extension with sh:
209 EXECSHELL=sh
210
211 cccdlflags='-Zdll'
212 dlsrc='dl_dlopen.xs'
213 ld='gcc'
214
215 #cppflags='-DDOSISH -DOS2=2 -DEMBED -I.'
216
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
220 stdstdunder=`echo "#include <stdio.h>" | cpp | egrep -c "char +\* +_ptr"`
221 d_stdstdio='define'
222 d_stdiobase='define'
223 d_stdio_ptr_lval='define'
224 d_stdio_cnt_lval='define'
225
226 if 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'
233 else
234   stdio_ptr='((fp)->_ptr)'
235   stdio_cnt='((fp)->_rcount)'
236   stdio_base='((fp)->_buffer)'
237   stdio_bufsiz='((fp)->_rcount + (fp)->_ptr - (fp)->_buffer)'
238 fi
239
240 # to put into config.sh
241 myttyname="$myttyname"
242
243 # To have manpages installed
244 nroff='nroff.cmd'
245 # above will be overwritten otherwise, indented to avoid config.sh
246   _nroff='nroff.cmd'
247
248 # should be handled automatically by Configure now.
249 ln='cp'
250 # Will be rewritten otherwise, indented to not put in config.sh
251   _ln='cp'
252 lns='cp'
253
254 nm_opt='-p'
255
256 ####### We define these functions ourselves
257
258 d_strtoll='define'
259 d_strtoull='define'
260 d_getprior='define'
261 d_setprior='define'
262
263 # The next two are commented. pdksh handles #!, extproc gives no path part.
264 # sharpbang='extproc '
265 # shsharp='false'
266
267 # Commented:
268 #startsh='extproc ksh\\n#! sh'
269
270 # Find patch:
271 gnupatch='patch'
272 if (gnupatch -v || gnupatch --version)   2>&1 >/dev/null; then
273     gnupatch=gnupatch
274 else
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
283 fi
284
285 # Apply patches if needed
286 case "$0$running_c_cmd" in
287   *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd
288     if test "Xyes" = "X$configure_cmd_loop"; then
289         cat <<EOC >&2
290 !!!
291 !!! PANIC: Loop of self-invocations detected, aborting!
292 !!!
293 EOC
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
306         # Not patched!
307         # Restore the initial command line arguments
308         if test -f ./Configure.cmd ; then
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 !!!
325 EOC
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
339             exit 2
340         fi
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
347 EOC
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
357         ($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2
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 !!!
363 EOC
364         echo "extproc sh" > Configure.ctm
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 !!!
372 EOC
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
386     else
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
392     fi 
393     ;;
394   *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2
395 esac
396
397 # This script UU/usethreads.cbu will get 'called-back' by Configure 
398 # after it has prompted the user for whether to use threads.
399 cat > UU/usethreads.cbu <<'EOCBU'
400 case "$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         ;;
409 esac
410 EOCBU
411
412 if 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
422 fi
423 if test -n "$cryptlib"; then
424         libs="$libs $cryptlib"
425         # d_crypt=define
426 fi
427
428 # Now install the external modules. We are in the ./hints directory.
429
430 cd ./os2/OS2
431
432 if ! test -d ../../ext/OS2 ; then
433    mkdir ../../ext/OS2
434 fi
435
436 cp -rfu * ../../ext/OS2/
437
438 # Install tests:
439
440 cp -uf ../*.t ../../t/lib
441 for 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
455 done
456
457 case "$ldlibpthname" in
458 '') ldlibpthname=none ;;
459 esac
460
461 # Now go back
462 cd ../..