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 :-(): 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 135# -D__ST_MT_ERRNO__ allows a quick relink with -Zmtd to check problems 136# which may be due to linking with -Zmtd DLLs 137 138# Cannot have 32000K stack: get SYS0170 ?! 139if [ $emxcrtrev -ge 50 ]; then 140 aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000 -D__ST_MT_ERRNO__' 141else 142 aout_ldflags='-Zexe -Zstack 16000 -D__ST_MT_ERRNO__' 143fi 144 145# To get into config.sh: 146aout_ldflags="$aout_ldflags" 147 148aout_d_fork='define' 149aout_ccflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev -D__ST_MT_ERRNO__" 150aout_cppflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev -D__ST_MT_ERRNO__" 151aout_use_clib='c' 152aout_usedl='undef' 153aout_archobjs="os2.o dl_os2.o" 154# Not listed in dynamic_ext, but needed for AOUT static_ext nevertheless 155aout_extra_static_ext="OS2::DLL" 156 157# variable which have different values for aout compile 158used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags' 159 160if [ "$emxaout" != "" ]; then 161 d_shrplib="$aout_d_shrplib" 162 useshrplib="$aout_useshrplib" 163 obj_ext="$aout_obj_ext" 164 lib_ext="$aout_lib_ext" 165 ar="$aout_ar" 166 plibext="$aout_plibext" 167 if [ $emxcrtrev -lt 50 ]; then 168 d_fork="$aout_d_fork" 169 fi 170 lddlflags="$aout_lddlflags" 171 ldflags="$aout_ldflags" 172 ccflags="$aout_ccflags" 173 cppflags="$aout_cppflags" 174 use_clib="$aout_use_clib" 175 usedl="$aout_usedl" 176else 177 d_shrplib='define' 178 useshrplib='true' 179 obj_ext='.obj' 180 lib_ext='.lib' 181 ar='emxomfar' 182 plibext='.lib' 183 if [ $emxcrtrev -ge 50 ]; then 184 d_fork='define' 185 else 186 d_fork='undef' 187 fi 188 lddlflags="-Zdll -Zomf -Zmt -Zcrtdll -Zlinker /e:2" 189 # Recursive regmatch may eat 2.5M of stack alone. 190 ldflags='-Zexe -Zomf -Zmt -Zcrtdll -Zstack 32000 -Zlinker /e:2' 191 if [ $emxcrtrev -ge 50 ]; then 192 ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. $_defemxcrtrev" 193 else 194 ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. -DEMX_BAD_SBRK $_defemxcrtrev" 195 fi 196 use_clib='c_import' 197 usedl='define' 198fi 199 200# indented to miss config.sh 201 _ar="$ar" 202 203# To get into config.sh (should start at the beginning of line) 204# or you can put it into config.over. 205plibext="$plibext" 206# plibext is not needed anymore. Just directly set $libperl. 207libperl="libperl${plibext}" 208 209#libc="/emx/lib/st/c_import$lib_ext" 210libc="$libemx/mt/$use_clib$lib_ext" 211 212if test -r "$libemx/c_alias$lib_ext"; then 213 libnames="$libemx/c_alias$lib_ext" 214fi 215# otherwise puts -lc ??? 216 217# [Maybe we should just remove c from $libswanted ?] 218 219# Test would pick up wrong rand, so we hardwire the value for random() 220libs='-lsocket -lm -lbsd' 221randbits=31 222archobjs="os2$obj_ext dl_os2$obj_ext" 223 224# Run files without extension with sh: 225EXECSHELL=sh 226 227cccdlflags='-Zdll' 228dlsrc='dl_dlopen.xs' 229ld='gcc' 230 231#cppflags='-DDOSISH -DOS2=2 -DEMBED -I.' 232 233# for speedup: (some patches to ungetc are also needed): 234# Note that without this guy tests 8 and 10 of io/tell.t fail, with it 11 fails 235 236stdstdunder=`echo "#include <stdio.h>" | cpp | egrep -c "char +\* +_ptr"` 237d_stdstdio='define' 238d_stdiobase='define' 239d_stdio_ptr_lval='define' 240d_stdio_cnt_lval='define' 241 242if test "$stdstdunder" = 0; then 243 stdio_ptr='((fp)->ptr)' 244 stdio_cnt='((fp)->rcount)' 245 stdio_base='((fp)->buffer)' 246 stdio_bufsiz='((fp)->rcount + (fp)->ptr - (fp)->buffer)' 247 ccflags="$ccflags -DMYTTYNAME" 248 myttyname='define' 249else 250 stdio_ptr='((fp)->_ptr)' 251 stdio_cnt='((fp)->_rcount)' 252 stdio_base='((fp)->_buffer)' 253 stdio_bufsiz='((fp)->_rcount + (fp)->_ptr - (fp)->_buffer)' 254fi 255 256# to put into config.sh 257myttyname="$myttyname" 258 259# To have manpages installed 260nroff='nroff.cmd' 261# above will be overwritten otherwise, indented to avoid config.sh 262 _nroff='nroff.cmd' 263 264# should be handled automatically by Configure now. 265ln='cp' 266# Will be rewritten otherwise, indented to not put in config.sh 267 _ln='cp' 268lns='cp' 269 270nm_opt='-p' 271 272####### We define these functions ourselves 273 274d_strtoll='define' 275d_strtoull='define' 276d_getprior='define' 277d_setprior='define' 278d_usleep='define' 279d_usleepproto='define' 280 281# The next two are commented. pdksh handles #!, extproc gives no path part. 282# sharpbang='extproc ' 283# shsharp='false' 284 285# Commented: 286#startsh='extproc ksh\\n#! sh' 287 288# Find patch: 289gnupatch='patch' 290if (gnupatch -v || gnupatch --version) 2>&1 >/dev/null; then 291 gnupatch=gnupatch 292else 293 if (gpatch -v || gpatch --version) 2>&1 >/dev/null; then 294 gnupatch=gpatch 295 else 296 # They may have a special PATH during configuring 297 if (patch -v || patch --version) 2>&1 >/dev/null; then 298 gnupatch="`./UU/loc patch.exe undef $pth`" 299 fi 300 fi 301fi 302 303for f in less.exe less.sh less.ksh less.cmd more.exe more.sh more.ksh more.cmd ; do 304 if test -z "$pager"; then 305 pager="`./UU/loc $f '' $pth`" 306 fi 307done 308if test -z "$pager"; then 309 pager='cmd /c more' 310fi 311 312# Apply patches if needed 313case "$0$running_c_cmd" in 314 *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd 315 if test "Xyes" = "X$configure_cmd_loop"; then 316 cat <<EOC >&2 317!!! 318!!! PANIC: Loop of self-invocations detected, aborting! 319!!! 320EOC 321 exit 20 322 fi 323 configure_cmd_loop=yes 324 export configure_cmd_loop 325 326 configure_needs_patch='' 327 if test -s ./os2/diff.configure; then 328 if ! grep "^#OS2-PATCH-APPLIED" ./Configure > /dev/null; then 329 configure_needs_patch=yes 330 fi 331 fi 332 if test -n "$configure_needs_patch"; then 333 # Not patched! 334 # Restore the initial command line arguments 335 if test -f ./Configure.cmd ; then 336 cat <<EOC >&2 337!!! 338!!! I see that what is running is ./Configure. 339!!! ./Configure is not patched, but ./Configure.cmd exists. 340!!! 341!!! You are supposed to run Configure.cmd, not Configure 342!!! after an automagic patching. 343!!! 344!!! If you insist on running Configure, you may 345!!! patch it manually from ./os2/diff.configure. 346!!! 347!!! However, I went through incredible hoolahoops, and I expect I can 348!!! auto-restart Configure.cmd myself. I will start it with arguments: 349!!! 350!!! Configure.cmd $args_exp 351!!! 352EOC 353 rp='Do you want to auto-restart Configure.cmd?' 354 dflt='y' 355 . UU/myread 356 case "$ans" in 357 [yY]) echo >&4 "Okay, continuing." ;; 358 *) echo >&4 "Okay, bye." 359 exit 2 360 ;; 361 esac 362 eval "set X $args_exp"; 363 shift; 364 # Restore the output 365 exec Configure.cmd "$@" 1>&2 366 exit 2 367 fi 368 cat <<EOC >&2 369!!! 370!!! You did not patch ./Configure! 371!!! I can create Configure.cmd and patch it from ./os2/diff.configure with the command 372!!! 373!!! $gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch 374EOC 375 rp='Do you want to auto-patch Configure to Configure.cmd?' 376 dflt='y' 377 . UU/myread 378 case "$ans" in 379 [yY]) echo >&4 "Okay, continuing." ;; 380 *) echo >&4 "Okay, bye." 381 exit 2 382 ;; 383 esac 384 ($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2 385 cat <<EOC >&2 386!!! 387!!! The report of patching is copied to 00_auto_patch. 388!!! Now we need to restart Configure.cmd with all the options. 389!!! 390EOC 391 echo "extproc sh" > Configure.ctm 392 ( cat Configure.cmd >> Configure.ctm && mv -f Configure.ctm Configure.cmd ) || (echo "!!! Failure to add extproc-line to Configure.cmd." >&2 ; exit 21) 393 cat <<EOC >&2 394!!! I went through incredible hoolahoops, and I expect I can 395!!! auto-restart Configure.cmd myself. I will start it with arguments: 396!!! 397!!! Configure.cmd $args_exp 398!!! 399EOC 400 rp='Do you want to auto-restart Configure.cmd?' 401 dflt='y' 402 . UU/myread 403 case "$ans" in 404 [yY]) echo >&4 "Okay, continuing." ;; 405 *) echo >&4 "Okay, bye." 406 exit 2 407 ;; 408 esac 409 eval "set X $args_exp"; 410 shift; 411 exec Configure.cmd "$@" 1>&2 412 exit 2 413 else 414 if test -s ./os2/diff.configure; then 415 echo "!!! Apparently we are running a patched Configure." >&2 416 else 417 echo "!!! Apparently there is no need to patch Configure." >&2 418 fi 419 fi 420 ;; 421 *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2 422esac 423 424# This script UU/usethreads.cbu will get 'called-back' by Configure 425# after it has prompted the user for whether to use threads. 426cat > UU/usethreads.cbu <<'EOCBU' 427case "$usethreads" in 428$define|true|[yY]*) 429 ccflags="-Zmt $ccflags" 430 cppflags="-Zmt $cppflags" # Do we really need to set this? 431 aout_ccflags="-DUSE_THREADS $aout_ccflags" 432 aout_cppflags="-DUSE_THREADS $aout_cppflags" 433 aout_lddlflags="-Zmt $aout_lddlflags" 434 aout_ldflags="-Zmt $aout_ldflags" 435 ;; 436esac 437EOCBU 438 439if test -z "$cryptlib"; then 440 cryptlib=`UU/loc crypt$lib_ext "" $libpth` 441 if $test -n "$cryptlib"; then 442 cryptlib=-lcrypt 443 else 444 cryptlib=`UU/loc ufc$lib_ext "" $libpth` 445 if $test -n "$cryptlib"; then 446 cryptlib=-lufc 447 fi 448 fi 449fi 450if test -n "$cryptlib"; then 451 libs="$libs $cryptlib" 452 # d_crypt=define 453fi 454 455# Now install the external modules. We are in the ./hints directory. 456 457cd ./os2/OS2 458 459cp -rfu * ../../ext/ 460 461# Install tests: 462 463cp -uf ../*.t ../../t/lib 464for 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 478done 479 480case "$ldlibpthname" in 481'') ldlibpthname=none ;; 482esac 483 484# Now go back 485cd ../.. 486cp os2/*.t t/lib 487