X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=hints%2Fos2.sh;h=1d9df3683f8aff1df15011673981bb0be99e747e;hb=4cc87e5d7e477e9e407eb2b921760421a995b9b5;hp=55766f7482ddb2e7cf41000f0481e2b6cc105734;hpb=4633a7c4bad06b471d9310620b7fe8ddd158cccd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/hints/os2.sh b/hints/os2.sh index 55766f7..1d9df36 100644 --- a/hints/os2.sh +++ b/hints/os2.sh @@ -1,192 +1,361 @@ -# Problems: -# a) warning from fcntl: Third argument is int in emx - patched -# b) gr_password is not a structure in struct group - patched -# c) (gone) -# d) Makefile needs sh before ./makedir -# e) (gone) -# f) (gone) -# g) (gone) -# h) (gone) -# i) (gone) -# j) the rule true in Makefile should become sh -c true -# k) Cwd does not work. ===> the extensions cannot be compiled - patched -# l) TEST expects to get -e 'perl' - patched -# m) (gone) - -# Tests failing with .o compile (this is probably obsolete, but now it is .obj): - -# comp/cpp (because of sed above) -# io/fs.t : (patched) 2..5 7..11 18 (why 11?) -# io/inplace.t ???? (ak works) -# io/tell.t 10 ???? -# op/exec.t 1 ???? 4 ???? -# op/glob.t 1 (bug in sh) -# op/magic.t 4 1/2 (????) adding sleep 5 does not help -# op/readdir.t 3 (same bug in ksh) -# op/stat.t 3 4 9 10 20 >34 - -# Newer results with .obj without i/o optimization, fail: - -# io/fs.t : 2+ -# io/pipe.t : 1+ -# io/tell.t : 8, 10 -# op/exec.t : 4, 6 (ok 1 comes as "ok \1") -# op/fork.t : 1+ -# op/misc.t : 9 -# op/pack.t : 8 -# op/stat.t : 3 4 9 10 20 >34 -# lib/sdbm.t : sdbm store returned -1, errno 0, key "21" at lib/sdbm.t line 112. -# lib/posix.t : coredump on 3 - -# If compiled with i/o optimization, then 15% speedup on input, and -# io/tell.t : 11 only -# no coredump in posix.t - - -# Note that during the .obj compile you need to move the perl.dll file -# to LIBPATH :-( - -#osname="OS/2" -sysman=`../UU/loc . /man/man1 /usr/man/man1 c:/man/man1 c:/usr/man/man1` +#! /bin/sh +# hints/os2.sh +# This file reflects the tireless work of +# Ilya Zakharevich +# +# Trimmed and comments added by +# Andy Dougherty +# Exactly what is required beyond a standard OS/2 installation? +# (see in README.os2) + +# Note that symbol extraction code gives wrong answers (sometimes?) on +# gethostent and setsid. + +# Optimization (GNU make 3.74 cannot be loaded :-(): +emxload -m 30 sh.exe ls.exe tr.exe id.exe sed.exe # make.exe +emxload -m 30 grep.exe egrep.exe fgrep.exe cat.exe rm.exe mv.exe cp.exe +emxload -m 30 uniq.exe basename.exe sort.exe awk.exe echo.exe + +path_sep=\; + +if test -f $sh.exe; then sh=$sh.exe; fi + +startsh="#!$sh" cc='gcc' -usrinc='/emx/include' -libpth='/emx/lib/st /emx/lib' + +# Make denser object files and DLL +case "X$optimize" in + X) + optimize="-O2 -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -s" + ld_dll_optimize="-s" + ;; +esac + +# Get some standard things (indented to avoid putting in config.sh): + oifs="$IFS" + IFS=" ;" + set $MANPATH + tryman="$@" + set $LIBRARY_PATH + libemx="$@" + set $C_INCLUDE_PATH + usrinc="$@" + IFS="$oifs" + tryman="`./UU/loc . /man $tryman`" + tryman="`echo $tryman | tr '\\\' '/'`" + + # indented to avoid having it *two* times at start + libemx="`./UU/loc os2.a /emx/lib $libemx`" + +usrinc="`./UU/loc stdlib.h /emx/include $usrinc`" +usrinc="`dirname $usrinc | tr '\\\' '/'`" +libemx="`dirname $libemx | tr '\\\' '/'`" + +if test -d $tryman/man1; then + sysman="$tryman/man1" +else + 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`" +fi + +emxpath="`dirname $libemx`" +if test ! -d "$emxpath"; then + emxpath="`./UU/loc . /emx c:/emx d:/emx e:/emx f:/emx g:/emx h:/emx /emx`" +fi + +if test ! -d "$libemx"; then + libemx="$emxpath/lib" +fi +if test ! -d "$libemx"; then + if test -d "$LIBRARY_PATH"; then + libemx="$LIBRARY_PATH" + else + libemx="`./UU/loc . X c:/emx/lib d:/emx/lib e:/emx/lib f:/emx/lib g:/emx/lib h:/emx/lib /emx/lib`" + fi +fi + +if test ! -d "$usrinc"; then + if test -d "$emxpath/include"; then + usrinc="$emxpath/include" + else + if test -d "$C_INCLUDE_PATH"; then + usrinc="$C_INCLUDE_PATH" + else + usrinc="`./UU/loc . X c:/emx/include d:/emx/include e:/emx/include f:/emx/include g:/emx/include h:/emx/include /emx/include`" + fi + fi +fi + +rsx="`./UU/loc rsx.exe undef $pth`" + +if test "$libemx" = "X"; then echo "Cannot find C library!" >&2; fi + +# Acute backslashitis: +libpth="`echo \"$LIBRARY_PATH\" | tr ';\\\' ' /'`" +libpth="$libpth $libemx/mt $libemx" + +set `emxrev -f emxlibcm` +emxcrtrev=$5 +# indented to not put it into config.sh + _defemxcrtrev=-D_EMX_CRT_REV_=$emxcrtrev so='dll' # Additional definitions: -d_shrplib='define' firstmakefile='GNUmakefile' -obj_ext='.obj' -obj_ext_regexp='\.obj' -lib_ext='.lib' -ar='emxomfar' -plibext='.lib' exe_ext='.exe' -archobjs="os2$obj_ext" -cldlibs='' - -libc="/emx/lib/st/c_import$lib_ext" +# We provide it +i_dlfcn='define' + +aout_d_shrplib='undef' +aout_useshrplib='false' +aout_obj_ext='.o' +aout_lib_ext='.a' +aout_ar='ar' +aout_plibext='.a' +aout_lddlflags="-Zdll $ld_dll_optimize" +# Cannot have 32000K stack: get SYS0170 ?! +if [ $emxcrtrev -ge 50 ]; then + aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000' +else + aout_ldflags='-Zexe -Zstack 16000' +fi + +# To get into config.sh: +aout_ldflags="$aout_ldflags" + +aout_d_fork='define' +aout_ccflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev" +aout_cppflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev" +aout_use_clib='c' +aout_usedl='undef' +aout_archobjs="os2.o dl_os2.o" + +# variable which have different values for aout compile +used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags' + +if [ "$emxaout" != "" ]; then + d_shrplib="$aout_d_shrplib" + useshrplib="$aout_useshrplib" + obj_ext="$aout_obj_ext" + lib_ext="$aout_lib_ext" + ar="$aout_ar" + plibext="$aout_plibext" + if [ $emxcrtrev -lt 50 ]; then + d_fork="$aout_d_fork" + fi + lddlflags="$aout_lddlflags" + ldflags="$aout_ldflags" + ccflags="$aout_ccflags" + cppflags="$aout_cppflags" + use_clib="$aout_use_clib" + usedl="$aout_usedl" +else + d_shrplib='define' + useshrplib='true' + obj_ext='.obj' + lib_ext='.lib' + ar='emxomfar' + plibext='.lib' + if [ $emxcrtrev -ge 50 ]; then + d_fork='define' + else + d_fork='undef' + fi + lddlflags="-Zdll -Zomf -Zmt -Zcrtdll $ld_dll_optimize" + # Recursive regmatch may eat 2.5M of stack alone. + ldflags='-Zexe -Zomf -Zmt -Zcrtdll -Zstack 32000' + if [ $emxcrtrev -ge 50 ]; then + ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. $_defemxcrtrev" + else + ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. -DEMX_BAD_SBRK $_defemxcrtrev" + fi + use_clib='c_import' + usedl='define' +fi + +# indented to miss config.sh + _ar="$ar" + +# To get into config.sh (should start at the beginning of line) +# or you can put it into config.over. +plibext="$plibext" +# plibext is not needed anymore. Just directly set $libperl. +libperl="libperl${plibext}" + +#libc="/emx/lib/st/c_import$lib_ext" +libc="$libemx/mt/$use_clib$lib_ext" + +if test -r "$libemx/c_alias$lib_ext"; then + libnames="$libemx/c_alias$lib_ext" +fi # otherwise puts -lc ??? -libs='-lsocket -lm' +# [Maybe we should just remove c from $libswanted ?] -# Run files without extension with sh - feature of patched ksh -NOHASHBANG=sh +# Test would pick up wrong rand, so we hardwire the value for random() +libs='-lsocket -lm -lbsd' +randbits=31 +archobjs="os2$obj_ext dl_os2$obj_ext" + +# Run files without extension with sh: +EXECSHELL=sh cccdlflags='-Zdll' -dlsrc='dl_os2.xs' -lddlflags='-Zdll -Zomf -Zcrtdll' -ldflags='-Zexe -Zomf -Zcrtdll' +dlsrc='dl_dlopen.xs' ld='gcc' -usedl='define' -ccflags='-Zomf -DDOSISH -DOS2=2 -DEMBED -I.' -cppflags='-DDOSISH -DOS2=2 -DEMBED -I.' - -# This variables taken from recommended config.sh -alignbytes='8' -d_fork='undef' +#cppflags='-DDOSISH -DOS2=2 -DEMBED -I.' # for speedup: (some patches to ungetc are also needed): # Note that without this guy tests 8 and 10 of io/tell.t fail, with it 11 fails +stdstdunder=`echo "#include " | cpp | egrep -c "char +\* +_ptr"` d_stdstdio='define' d_stdiobase='define' d_stdio_ptr_lval='define' d_stdio_cnt_lval='define' -stdio_ptr='((fp)->ptr)' -stdio_cnt='((fp)->rcount)' -stdio_base='((fp)->buffer)' -stdio_bufsiz='((fp)->rcount + (fp)->ptr - (fp)->buffer)' - -# I do not have these: -#dynamic_ext='Fcntl GDBM_File SDBM_File POSIX Socket UPM REXXCALL' -dynamic_ext='Fcntl POSIX Socket SDBM_File Devel/DProf' -#extensions='Fcntl GDBM_File SDBM_File POSIX Socket UPM REXXCALL' -extensions='Fcntl SDBM_File POSIX Socket Devel/DProf' +if test "$stdstdunder" = 0; then + stdio_ptr='((fp)->ptr)' + stdio_cnt='((fp)->rcount)' + stdio_base='((fp)->buffer)' + stdio_bufsiz='((fp)->rcount + (fp)->ptr - (fp)->buffer)' + ccflags="$ccflags -DMYTTYNAME" + myttyname='define' +else + stdio_ptr='((fp)->_ptr)' + stdio_cnt='((fp)->_rcount)' + stdio_base='((fp)->_buffer)' + stdio_bufsiz='((fp)->_rcount + (fp)->_ptr - (fp)->_buffer)' +fi + +# to put into config.sh +myttyname="$myttyname" # To have manpages installed -echo nroff is "'$nroff'" nroff='nroff.cmd' -_nroff='nroff.cmd' -echo nroff is "'$nroff'" - -# Unknown reasons for: -#cpio='cpio' -#csh='' -#date='' -#byacc='' -#d_charsprf='undef' -#d_drem='undef' -#d_fmod='define' -#d_linuxstd='undef' -#d_socket='define' -#gcc='gcc' -#gidtype='gid_t' -#glibpth='c:/usr/lib/emx h:/emx/lib /emx/lib' -#groupstype='gid_t' -#h_fcntl='true' -#i_time='define' -#line='' -#lseektype='off_t' -#man1ext='1' -#man3ext='3' -#modetype='mode_t' -#more='more' -#mv='mv' -#sleep='sleep' -#socketlib='-lsocket' -#ssizetype='ssize_t' -#tar='tar' -#timetype='time_t' -#uidtype='uid_t' -#uname='' -#uniq='' -#xlibpth='' -#yacc='yacc' -#yaccflags='' -#zcat='zcat' -#orderlib='false' -#pg='pg' -#pr='pr' -#ranlib=':' - -# Misfound by configure: - -#gcc='gcc' -#more='more' -#mv='mv' -#pr='pr' -#sleep='sleep' -#tar='tar' - -xlibpth='' - -# I cannot stand it, but did not test with: -# d_dirnamlen='undef' - -# I try to do without these: - -#d_pwage='undef' -#d_pwcomment='undef' +# above will be overwritten otherwise, indented to avoid config.sh + _nroff='nroff.cmd' +# should be handled automatically by Configure now. ln='cp' +# Will be rewritten otherwise, indented to not put in config.sh + _ln='cp' lns='cp' -# ???? -#mallocobj='' -#mallocsrc='' -#usemymalloc='false' - nm_opt='-p' -# The next two are commented. pdksh handles #! +####### We define these functions ourselves + +d_getprior='define' +d_setprior='define' + +# The next two are commented. pdksh handles #!, extproc gives no path part. # sharpbang='extproc ' # shsharp='false' # Commented: #startsh='extproc ksh\\n#! sh' + +# Find patch: +gnupatch='patch' +if (gnupatch -v || gnupatch --version) 2>&1 >/dev/null; then + gnupatch=gnupatch +else + if (gpatch -v || gpatch --version) 2>&1 >/dev/null; then + gnupatch=gpatch + else + # They may have a special PATH during configuring + if (patch -v || patch --version) 2>&1 >/dev/null; then + gnupatch="`./UU/loc patch.exe undef $pth`" + fi + fi +fi + +# Apply patches if needed +case "$0$running_c_cmd" in + *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd + if grep "^libnames" ./Configure > /dev/null; then + # Not patched! + if test -f ./Configure.cmd ; then + echo "!!!" >&2 + echo "!!! ./Configure not patched, but ./Configure.cmd exits" >&2 + echo "!!! Do not know what to do!" >&2 + echo "!!!" >&2 + exit 2 + fi + echo "!!!" >&2 + echo "!!! You did not patch ./Configure!" >&2 + echo "!!! I create Configure.cmd and patch it from ./os2/diff.configure." >&2 + echo "!!!" >&2 + echo "$gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch" >&2 + ($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2 + echo "!!!" >&2 + echo "!!! The report of patching is copied to 00_auto_patch." >&2 + echo "!!! Now you need to restart Configure.cmd with all the options" >&2 + echo "!!!" >&2 + echo "extproc sh" > Configure.ctm + cat Configure.cmd >> Configure.ctm && mv -f Configure.ctm Configure.cmd + exit 0 + else + echo "!!! Apparently we are running a patched Configure." >&2 + fi + ;; + *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2 +esac + +# Copy pod: + +cp -uf ./README.os2 ./pod/perlos2.pod + +# This script UU/usethreads.cbu will get 'called-back' by Configure +# after it has prompted the user for whether to use threads. +cat > UU/usethreads.cbu <<'EOCBU' +case "$usethreads" in +$define|true|[yY]*) + ccflags="-Zmt $ccflags" + cppflags="-Zmt $cppflags" # Do we really need to set this? + aout_ccflags="-DUSE_THREADS $aout_ccflags" + aout_cppflags="-DUSE_THREADS $aout_cppflags" + aout_lddlflags="-Zmt $aout_lddlflags" + aout_ldflags="-Zmt $aout_ldflags" + ;; +esac +EOCBU + +# Now install the external modules. We are in the ./hints directory. + +cd ./os2/OS2 + +if ! test -d ../../ext/OS2 ; then + mkdir ../../ext/OS2 +fi + +cp -rfu * ../../ext/OS2/ + +# Install tests: + +for xxx in * ; do + if $test -d $xxx/t; then + cp -uf $xxx/t/*.t ../../t/lib + else + if $test -d $xxx; then + cd $xxx + for yyy in * ; do + if $test -d $yyy/t; then + cp -uf $yyy/t/*.t ../../t/lib + fi + done + cd .. + fi + fi +done + +case "$ldlibpthname" in +'') ldlibpthname=none ;; +esac + +# Now go back +cd ../..