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 `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_getprior='define' 253d_setprior='define' 254 255# The next two are commented. pdksh handles #!, extproc gives no path part. 256# sharpbang='extproc ' 257# shsharp='false' 258 259# Commented: 260#startsh='extproc ksh\\n#! sh' 261 262# Find patch: 263gnupatch='patch' 264if (gnupatch -v || gnupatch --version) 2>&1 >/dev/null; then 265 gnupatch=gnupatch 266else 267 if (gpatch -v || gpatch --version) 2>&1 >/dev/null; then 268 gnupatch=gpatch 269 else 270 # They may have a special PATH during configuring 271 if (patch -v || patch --version) 2>&1 >/dev/null; then 272 gnupatch="`./UU/loc patch.exe undef $pth`" 273 fi 274 fi 275fi 276 277# Apply patches if needed 278case "$0$running_c_cmd" in 279 *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd 280 if grep "^libnames" ./Configure > /dev/null; then 281 # Not patched! 282 if test -f ./Configure.cmd ; then 283 echo "!!!" >&2 284 echo "!!! ./Configure not patched, but ./Configure.cmd exits" >&2 285 echo "!!! Do not know what to do!" >&2 286 echo "!!!" >&2 287 exit 2 288 fi 289 echo "!!!" >&2 290 echo "!!! You did not patch ./Configure!" >&2 291 echo "!!! I create Configure.cmd and patch it from ./os2/diff.configure." >&2 292 echo "!!!" >&2 293 echo "$gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch" >&2 294 ($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2 295 echo "!!!" >&2 296 echo "!!! The report of patching is copied to 00_auto_patch." >&2 297 echo "!!! Now you need to restart Configure.cmd with all the options" >&2 298 echo "!!!" >&2 299 echo "extproc sh" > Configure.ctm 300 cat Configure.cmd >> Configure.ctm && mv -f Configure.ctm Configure.cmd 301 exit 0 302 else 303 echo "!!! Apparently we are running a patched Configure." >&2 304 fi 305 ;; 306 *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2 307esac 308 309# Copy pod: 310 311cp -uf ./README.os2 ./pod/perlos2.pod 312 313# This script UU/usethreads.cbu will get 'called-back' by Configure 314# after it has prompted the user for whether to use threads. 315cat > UU/usethreads.cbu <<'EOCBU' 316case "$usethreads" in 317$define|true|[yY]*) 318 ccflags="-Zmt $ccflags" 319 cppflags="-Zmt $cppflags" # Do we really need to set this? 320 aout_ccflags="-DUSE_THREADS $aout_ccflags" 321 aout_cppflags="-DUSE_THREADS $aout_cppflags" 322 aout_lddlflags="-Zmt $aout_lddlflags" 323 aout_ldflags="-Zmt $aout_ldflags" 324 ;; 325esac 326EOCBU 327 328# Now install the external modules. We are in the ./hints directory. 329 330cd ./os2/OS2 331 332if ! test -d ../../ext/OS2 ; then 333 mkdir ../../ext/OS2 334fi 335 336cp -rfu * ../../ext/OS2/ 337 338# Install tests: 339 340for xxx in * ; do 341 if $test -d $xxx/t; then 342 cp -uf $xxx/t/*.t ../../t/lib 343 else 344 if $test -d $xxx; then 345 cd $xxx 346 for yyy in * ; do 347 if $test -d $yyy/t; then 348 cp -uf $yyy/t/*.t ../../t/lib 349 fi 350 done 351 cd .. 352 fi 353 fi 354done 355 356case "$ldlibpthname" in 357'') ldlibpthname=none ;; 358esac 359 360# Now go back 361cd ../.. 362