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 111aout_d_shrplib='undef' 112aout_useshrplib='false' 113aout_obj_ext='.o' 114aout_lib_ext='.a' 115aout_ar='ar' 116aout_plibext='.a' 117aout_lddlflags="-Zdll $ld_dll_optimize" 118# Cannot have 32000K stack: get SYS0170 ?! 119if [ $emxcrtrev -ge 50 ]; then 120 aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000' 121else 122 aout_ldflags='-Zexe -Zstack 16000' 123fi 124 125# To get into config.sh: 126aout_ldflags="$aout_ldflags" 127 128aout_d_fork='define' 129aout_ccflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev" 130aout_cppflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev" 131aout_use_clib='c' 132aout_usedl='undef' 133aout_archobjs="os2.o dl_os2.o" 134 135# variable which have different values for aout compile 136used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags' 137 138if [ "$emxaout" != "" ]; then 139 d_shrplib="$aout_d_shrplib" 140 useshrplib="$aout_useshrplib" 141 obj_ext="$aout_obj_ext" 142 lib_ext="$aout_lib_ext" 143 ar="$aout_ar" 144 plibext="$aout_plibext" 145 if [ $emxcrtrev -lt 50 ]; then 146 d_fork="$aout_d_fork" 147 fi 148 lddlflags="$aout_lddlflags" 149 ldflags="$aout_ldflags" 150 ccflags="$aout_ccflags" 151 cppflags="$aout_cppflags" 152 use_clib="$aout_use_clib" 153 usedl="$aout_usedl" 154else 155 d_shrplib='define' 156 useshrplib='true' 157 obj_ext='.obj' 158 lib_ext='.lib' 159 ar='emxomfar' 160 plibext='.lib' 161 if [ $emxcrtrev -ge 50 ]; then 162 d_fork='define' 163 else 164 d_fork='undef' 165 fi 166 lddlflags="-Zdll -Zomf -Zmt -Zcrtdll $ld_dll_optimize" 167 # Recursive regmatch may eat 2.5M of stack alone. 168 ldflags='-Zexe -Zomf -Zmt -Zcrtdll -Zstack 32000' 169 if [ $emxcrtrev -ge 50 ]; then 170 ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. $_defemxcrtrev" 171 else 172 ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. -DEMX_BAD_SBRK $_defemxcrtrev" 173 fi 174 use_clib='c_import' 175 usedl='define' 176fi 177 178# indented to miss config.sh 179 _ar="$ar" 180 181# To get into config.sh (should start at the beginning of line) 182# or you can put it into config.over. 183plibext="$plibext" 184# plibext is not needed anymore. Just directly set $libperl. 185libperl="libperl${plibext}" 186 187#libc="/emx/lib/st/c_import$lib_ext" 188libc="$libemx/mt/$use_clib$lib_ext" 189 190if test -r "$libemx/c_alias$lib_ext"; then 191 libnames="$libemx/c_alias$lib_ext" 192fi 193# otherwise puts -lc ??? 194 195# [Maybe we should just remove c from $libswanted ?] 196 197# Test would pick up wrong rand, so we hardwire the value for random() 198libs='-lsocket -lm -lbsd' 199randbits=31 200archobjs="os2$obj_ext dl_os2$obj_ext" 201 202# Run files without extension with sh: 203EXECSHELL=sh 204 205cccdlflags='-Zdll' 206dlsrc='dl_dlopen.xs' 207ld='gcc' 208 209#cppflags='-DDOSISH -DOS2=2 -DEMBED -I.' 210 211# for speedup: (some patches to ungetc are also needed): 212# Note that without this guy tests 8 and 10 of io/tell.t fail, with it 11 fails 213 214stdstdunder=`echo "#include <stdio.h>" | cpp | egrep -c "char +\* +_ptr"` 215d_stdstdio='define' 216d_stdiobase='define' 217d_stdio_ptr_lval='define' 218d_stdio_cnt_lval='define' 219 220if test "$stdstdunder" = 0; then 221 stdio_ptr='((fp)->ptr)' 222 stdio_cnt='((fp)->rcount)' 223 stdio_base='((fp)->buffer)' 224 stdio_bufsiz='((fp)->rcount + (fp)->ptr - (fp)->buffer)' 225 ccflags="$ccflags -DMYTTYNAME" 226 myttyname='define' 227else 228 stdio_ptr='((fp)->_ptr)' 229 stdio_cnt='((fp)->_rcount)' 230 stdio_base='((fp)->_buffer)' 231 stdio_bufsiz='((fp)->_rcount + (fp)->_ptr - (fp)->_buffer)' 232fi 233 234# to put into config.sh 235myttyname="$myttyname" 236 237# To have manpages installed 238nroff='nroff.cmd' 239# above will be overwritten otherwise, indented to avoid config.sh 240 _nroff='nroff.cmd' 241 242# should be handled automatically by Configure now. 243ln='cp' 244# Will be rewritten otherwise, indented to not put in config.sh 245 _ln='cp' 246lns='cp' 247 248nm_opt='-p' 249 250####### We define these functions ourselves 251 252d_strtoll='define' 253d_strtoull='define' 254d_getprior='define' 255d_setprior='define' 256 257# The next two are commented. pdksh handles #!, extproc gives no path part. 258# sharpbang='extproc ' 259# shsharp='false' 260 261# Commented: 262#startsh='extproc ksh\\n#! sh' 263 264# Find patch: 265gnupatch='patch' 266if (gnupatch -v || gnupatch --version) 2>&1 >/dev/null; then 267 gnupatch=gnupatch 268else 269 if (gpatch -v || gpatch --version) 2>&1 >/dev/null; then 270 gnupatch=gpatch 271 else 272 # They may have a special PATH during configuring 273 if (patch -v || patch --version) 2>&1 >/dev/null; then 274 gnupatch="`./UU/loc patch.exe undef $pth`" 275 fi 276 fi 277fi 278 279# Apply patches if needed 280case "$0$running_c_cmd" in 281 *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd 282 if grep "^libnames" ./Configure > /dev/null; then 283 # Not patched! 284 if test -f ./Configure.cmd ; then 285 echo "!!!" >&2 286 echo "!!! I see that what is running is ./Configure." >&2 287 echo "!!! ./Configure is not patched, but ./Configure.cmd exists." >&2 288 echo "!!!" >&2 289 echo "!!! You are supposed to run Configure.cmd, not Configure" >&2 290 echo "!!! after an automagic patching." >&2 291 echo "!!!" >&2 292 echo "!!! If you insist on running Configure, please" >&2 293 echo "!!! patch it manually from ./os2/diff.configure." >&2 294 echo "!!!" >&2 295 exit 2 296 fi 297 echo "!!!" >&2 298 echo "!!! You did not patch ./Configure!" >&2 299 echo "!!! I create Configure.cmd and patch it from ./os2/diff.configure." >&2 300 echo "!!!" >&2 301 echo "$gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch" >&2 302 ($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2 303 echo "!!!" >&2 304 echo "!!! The report of patching is copied to 00_auto_patch." >&2 305 echo "!!! Now you need to restart Configure.cmd with all the options" >&2 306 echo "!!!" >&2 307 echo "extproc sh" > Configure.ctm 308 cat Configure.cmd >> Configure.ctm && mv -f Configure.ctm Configure.cmd 309 exit 0 310 else 311 echo "!!! Apparently we are running a patched Configure." >&2 312 fi 313 ;; 314 *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2 315esac 316 317# This script UU/usethreads.cbu will get 'called-back' by Configure 318# after it has prompted the user for whether to use threads. 319cat > UU/usethreads.cbu <<'EOCBU' 320case "$usethreads" in 321$define|true|[yY]*) 322 ccflags="-Zmt $ccflags" 323 cppflags="-Zmt $cppflags" # Do we really need to set this? 324 aout_ccflags="-DUSE_THREADS $aout_ccflags" 325 aout_cppflags="-DUSE_THREADS $aout_cppflags" 326 aout_lddlflags="-Zmt $aout_lddlflags" 327 aout_ldflags="-Zmt $aout_ldflags" 328 ;; 329esac 330EOCBU 331 332# Now install the external modules. We are in the ./hints directory. 333 334cd ./os2/OS2 335 336if ! test -d ../../ext/OS2 ; then 337 mkdir ../../ext/OS2 338fi 339 340cp -rfu * ../../ext/OS2/ 341 342# Install tests: 343 344for xxx in * ; do 345 if $test -d $xxx/t; then 346 cp -uf $xxx/t/*.t ../../t/lib 347 else 348 if $test -d $xxx; then 349 cd $xxx 350 for yyy in * ; do 351 if $test -d $yyy/t; then 352 cp -uf $yyy/t/*.t ../../t/lib 353 fi 354 done 355 cd .. 356 fi 357 fi 358done 359 360case "$ldlibpthname" in 361'') ldlibpthname=none ;; 362esac 363 364# Now go back 365cd ../.. 366