xref: /openbsd-src/gnu/usr.bin/perl/hints/os2.sh (revision db3296cf5c1dd9058ceecc3a29fe4aaa0bd26000)
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 :-():
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
19path_sep=\;
20
21if test -f $sh.exe; then sh=$sh.exe; fi
22
23startsh="#!$sh"
24cc='gcc'
25
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
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
50usrinc="`./UU/loc stdlib.h /emx/include $usrinc`"
51usrinc="`dirname $usrinc | tr '\\\' '/'`"
52libemx="`dirname $libemx | tr '\\\' '/'`"
53
54if test -d $tryman/man1; then
55  sysman="$tryman/man1"
56else
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`"
58fi
59
60emxpath="`dirname $libemx`"
61if test ! -d "$emxpath"; then
62  emxpath="`./UU/loc . /emx c:/emx d:/emx e:/emx f:/emx g:/emx h:/emx /emx`"
63fi
64
65if test ! -d "$libemx"; then
66  libemx="$emxpath/lib"
67fi
68if 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
74fi
75
76if 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
86fi
87
88rsx="`./UU/loc rsx.exe undef $pth`"
89
90if test "$libemx" = "X"; then echo "Cannot find C library!" >&2; fi
91
92# Acute backslashitis:
93libpth="`echo \"$LIBRARY_PATH\" | tr ';\\\' ' /'`"
94libpth="$libpth $libemx/mt $libemx"
95
96set `cmd /c emxrev -f emxlibcm`
97emxcrtrev=$5
98# indented to not put it into config.sh
99  _defemxcrtrev=-D_EMX_CRT_REV_=$emxcrtrev
100
101so='dll'
102
103# Additional definitions:
104
105firstmakefile='GNUmakefile'
106exe_ext='.exe'
107
108# We provide it
109i_dlfcn='define'
110
111# The default one uses exponential notation between 0.0001 and 0.1
112d_Gconvert='gcvt_os2((x),(n),(b))'
113
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
123# -Zomf build has a problem with _exit() *flushing*, so the test
124# gets confused:
125fflushNULL="define"
126
127aout_d_shrplib='undef'
128aout_useshrplib='false'
129aout_obj_ext='.o'
130aout_lib_ext='.a'
131aout_ar='ar'
132aout_plibext='.a'
133aout_lddlflags="-Zdll $ld_dll_optimize"
134# Cannot have 32000K stack: get SYS0170  ?!
135if [ $emxcrtrev -ge 50 ]; then
136    aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000'
137else
138    aout_ldflags='-Zexe -Zstack 16000'
139fi
140
141# To get into config.sh:
142aout_ldflags="$aout_ldflags"
143
144aout_d_fork='define'
145aout_ccflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev"
146aout_cppflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev"
147aout_use_clib='c'
148aout_usedl='undef'
149aout_archobjs="os2.o dl_os2.o"
150# Not listed in dynamic_ext, but needed for AOUT static_ext nevertheless
151aout_extra_static_ext="OS2::DLL"
152
153# variable which have different values for aout compile
154used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags'
155
156if [ "$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"
172else
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'
194fi
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.
201plibext="$plibext"
202# plibext is not needed anymore.  Just directly set $libperl.
203libperl="libperl${plibext}"
204
205#libc="/emx/lib/st/c_import$lib_ext"
206libc="$libemx/mt/$use_clib$lib_ext"
207
208if test -r "$libemx/c_alias$lib_ext"; then
209    libnames="$libemx/c_alias$lib_ext"
210fi
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()
216libs='-lsocket -lm -lbsd'
217randbits=31
218archobjs="os2$obj_ext dl_os2$obj_ext"
219
220# Run files without extension with sh:
221EXECSHELL=sh
222
223cccdlflags='-Zdll'
224dlsrc='dl_dlopen.xs'
225ld='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
232stdstdunder=`echo "#include <stdio.h>" | cpp | egrep -c "char +\* +_ptr"`
233d_stdstdio='define'
234d_stdiobase='define'
235d_stdio_ptr_lval='define'
236d_stdio_cnt_lval='define'
237
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
260# should be handled automatically by Configure now.
261ln='cp'
262# Will be rewritten otherwise, indented to not put in config.sh
263  _ln='cp'
264lns='cp'
265
266nm_opt='-p'
267
268####### We define these functions ourselves
269
270d_strtoll='define'
271d_strtoull='define'
272d_getprior='define'
273d_setprior='define'
274
275# The next two are commented. pdksh handles #!, extproc gives no path part.
276# sharpbang='extproc '
277# shsharp='false'
278
279# Commented:
280#startsh='extproc ksh\\n#! sh'
281
282# Find patch:
283gnupatch='patch'
284if (gnupatch -v || gnupatch --version)   2>&1 >/dev/null; then
285    gnupatch=gnupatch
286else
287    if (gpatch -v || gpatch --version)   2>&1 >/dev/null; then
288	gnupatch=gpatch
289    else
290	# They may have a special PATH during configuring
291	if (patch -v || patch --version) 2>&1 >/dev/null; then
292	    gnupatch="`./UU/loc patch.exe undef $pth`"
293	fi
294    fi
295fi
296
297for f in less.exe less.sh less.ksh less.cmd more.exe more.sh more.ksh more.cmd ; do
298  if test -z "$pager"; then
299    pager="`./UU/loc $f '' $pth`"
300  fi
301done
302if test -z "$pager"; then
303  pager='cmd /c more'
304fi
305
306# Apply patches if needed
307case "$0$running_c_cmd" in
308  *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd
309    if test "Xyes" = "X$configure_cmd_loop"; then
310	cat <<EOC >&2
311!!!
312!!! PANIC: Loop of self-invocations detected, aborting!
313!!!
314EOC
315	exit 20
316    fi
317    configure_cmd_loop=yes
318    export configure_cmd_loop
319
320    configure_needs_patch=''
321    if test -s ./os2/diff.configure; then
322	if ! grep "^#OS2-PATCH-APPLIED" ./Configure > /dev/null; then
323	    configure_needs_patch=yes
324	fi
325    fi
326    if test -n "$configure_needs_patch"; then
327	# Not patched!
328	# Restore the initial command line arguments
329	if test -f ./Configure.cmd ; then
330	    cat <<EOC >&2
331!!!
332!!! I see that what is running is ./Configure.
333!!! ./Configure is not patched, but ./Configure.cmd exists.
334!!!
335!!! You are supposed to run Configure.cmd, not Configure
336!!!  after an automagic patching.
337!!!
338!!! If you insist on running Configure, you may
339!!!  patch it manually from ./os2/diff.configure.
340!!!
341!!! However, I went through incredible hoolahoops, and I expect I can
342!!!  auto-restart Configure.cmd myself.  I will start it with arguments:
343!!!
344!!!    Configure.cmd $args_exp
345!!!
346EOC
347	    rp='Do you want to auto-restart Configure.cmd?'
348	    dflt='y'
349	    . UU/myread
350	    case "$ans" in
351		[yY]) echo >&4 "Okay, continuing." ;;
352		*) echo >&4 "Okay, bye."
353		   exit 2
354		   ;;
355	    esac
356	    eval "set X $args_exp";
357	    shift;
358	    # Restore the output
359	    exec Configure.cmd "$@" 1>&2
360	    exit 2
361	fi
362	cat <<EOC >&2
363!!!
364!!! You did not patch ./Configure!
365!!! I can create Configure.cmd and patch it from ./os2/diff.configure with the command
366!!!
367!!!   $gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch
368EOC
369	rp='Do you want to auto-patch Configure to Configure.cmd?'
370	dflt='y'
371	. UU/myread
372	case "$ans" in
373		[yY]) echo >&4 "Okay, continuing." ;;
374		*) echo >&4 "Okay, bye."
375		   exit 2
376		   ;;
377	esac
378	($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2
379	cat <<EOC >&2
380!!!
381!!! The report of patching is copied to 00_auto_patch.
382!!! Now we need to restart Configure.cmd with all the options.
383!!!
384EOC
385	echo "extproc sh" > Configure.ctm
386	( cat Configure.cmd >> Configure.ctm && mv -f Configure.ctm Configure.cmd ) || (echo "!!! Failure to add extproc-line to Configure.cmd." >&2 ; exit 21)
387	cat <<EOC >&2
388!!! I went through incredible hoolahoops, and I expect I can
389!!!  auto-restart Configure.cmd myself.  I will start it with arguments:
390!!!
391!!!    Configure.cmd $args_exp
392!!!
393EOC
394	rp='Do you want to auto-restart Configure.cmd?'
395	dflt='y'
396	. UU/myread
397	case "$ans" in
398		[yY]) echo >&4 "Okay, continuing." ;;
399		*) echo >&4 "Okay, bye."
400		   exit 2
401		   ;;
402	esac
403	eval "set X $args_exp";
404	shift;
405	exec Configure.cmd "$@" 1>&2
406	exit 2
407    else
408	if test -s ./os2/diff.configure; then
409	    echo "!!! Apparently we are running a patched Configure." >&2
410	else
411	    echo "!!! Apparently there is no need to patch Configure." >&2
412	fi
413    fi
414    ;;
415  *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2
416esac
417
418# This script UU/usethreads.cbu will get 'called-back' by Configure
419# after it has prompted the user for whether to use threads.
420cat > UU/usethreads.cbu <<'EOCBU'
421case "$usethreads" in
422$define|true|[yY]*)
423	ccflags="-Zmt $ccflags"
424        cppflags="-Zmt $cppflags"  # Do we really need to set this?
425        aout_ccflags="-DUSE_THREADS $aout_ccflags"
426        aout_cppflags="-DUSE_THREADS $aout_cppflags"
427        aout_lddlflags="-Zmt $aout_lddlflags"
428        aout_ldflags="-Zmt $aout_ldflags"
429	;;
430esac
431EOCBU
432
433if test -z "$cryptlib"; then
434	cryptlib=`UU/loc crypt$lib_ext "" $libpth`
435	if $test -n "$cryptlib"; then
436		cryptlib=-lcrypt
437	else
438		cryptlib=`UU/loc ufc$lib_ext "" $libpth`
439		if $test -n "$cryptlib"; then
440			cryptlib=-lufc
441		fi
442	fi
443fi
444if test -n "$cryptlib"; then
445	libs="$libs $cryptlib"
446	# d_crypt=define
447fi
448
449# Now install the external modules. We are in the ./hints directory.
450
451cd ./os2/OS2
452
453if ! test -d ../../ext/OS2 ; then
454   mkdir ../../ext/OS2
455fi
456
457cp -rfu * ../../ext/OS2/
458
459# Install tests:
460
461cp -uf ../*.t ../../t/lib
462for xxx in * ; do
463	if $test -d $xxx/t; then
464		cp -uf $xxx/t/*.t ../../t/lib
465	else
466		if $test -d $xxx; then
467			cd $xxx
468			for yyy in * ; do
469				if $test -d $yyy/t; then
470				    cp -uf $yyy/t/*.t ../../t/lib
471				fi
472			done
473			cd ..
474		fi
475	fi
476done
477
478case "$ldlibpthname" in
479'') ldlibpthname=none ;;
480esac
481
482# Now go back
483cd ../..
484cp os2/*.t t/lib
485