1# hints/os390.sh 2# 3# OS/390 hints by David J. Fiander <davidf@mks.com> 4# 5# OS/390 OpenEdition Release 3 Mon Sep 22 1997 thanks to: 6# 7# John Goodyear <johngood@us.ibm.com> 8# John Pfuntner <pfuntner@vnet.ibm.com> 9# Len Johnson <lenjay@ibm.net> 10# Bud Huff <BAHUFF@us.oracle.com> 11# Peter Prymmer <pvhp@forte.com> 12# Andy Dougherty <doughera@lafayette.edu> 13# Tim Bunce <Tim.Bunce@ig.co.uk> 14# 15# as well as the authors of the aix.sh file 16# 17 18# To get ANSI C, we need to use c89, and ld doesn't exist 19# You can override this with Configure -Dcc=gcc -Dld=ld. 20case "$cc" in 21'') cc='c99' ;; 22esac 23case "$ld" in 24'') ld='c99' ;; 25esac 26 27# -DMAXSIG=39 maximum signal number 28# -DOEMVS is used in place of #ifdef __MVS__ in certain places. 29# -D_OE_SOCKETS alters system headers. 30# -D_XOPEN_SOURCE_EXTENDEDA alters system headers. 31# c89 hides most of the useful header stuff, _ALL_SOURCE turns it on again. 32# YYDYNAMIC ensures that the OS/390 yacc generated parser is reentrant. 33# -DEBCDIC should come from Configure and need not be mentioned here. 34# Prepend your favorites with Configure -Dccflags=your_favorites 35case "$ccflags" in 36'') ccflags='-qlanglvl=extended:extc89:extc99 -qlongname -qxplink -qdll -qfloat=ieee -qhaltonmsg=3296:4108 -DMAXSIG=39 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC -D_POSIX_SOURCE=1' ;; 37*) ccflags='$ccflags -qlanglvl=extended:extc89:extc99 -qlongname -qxplink -qdll -qfloat=ieee -qhaltonmsg=3296:4108 -DMAXSIG=39 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC -D_POSIX_SOURCE=1' ;; 38esac 39 40# Turning on optimization breaks perl. 41# You can override this with Configure -Doptimize='-O' or somesuch. 42case "$optimize" in 43'') optimize='none' ;; 44esac 45 46# To link via definition side decks we need the dll option 47# You can override this with Configure -Ucccdlflags or somesuch. 48case "$cccdlflags" in 49'') cccdlflags='-qxplink -qdll' ;; 50esac 51 52case "$so" in 53'') so='a' ;; 54esac 55 56case "$alignbytes" in 57'') alignbytes=8 ;; 58esac 59 60case "$usemymalloc" in 61'') usemymalloc='n' ;; 62esac 63 64# On OS/390, libc.a doesn't really hold anything at all, 65# so running nm on it is pretty useless. 66# You can override this with Configure -Dusenm. 67case "$usenm" in 68'') usenm='false' ;; 69esac 70 71# Setting ldflags='-Wl,EDIT=NO' will get rid of the symbol 72# information at the end of the executable (=> smaller binaries). 73# Override this option with -Dldflags='whatever else you wanted'. 74case "$ldflags" in 75'') ldflags='-qxplink -qdll' ;; 76esac 77 78# In order to build with dynamic be sure to specify: 79# Configure -Dusedl 80# Do not forget to add $archlibexp/CORE to your LIBPATH. 81# You might want to override some of this with things like: 82# Configure -Dusedl -Ddlext=so -Ddlsrc=dl_dllload.xs. 83case "$usedl" in 84'') 85 usedl='n' 86 case "$dlext" in 87 '') dlext='none' ;; 88 esac 89 ;; 90define) 91 case "$useshrplib" in 92 '') useshrplib='true' ;; 93 esac 94 case "$dlsrc" in 95 '') dlsrc='dl_dllload.xs' ;; 96 esac 97 # For performance use 'so' at or beyond v2.8, 'dll' for 2.7 and prior versions 98 case "`uname -v`x`uname -r`" in 99 02x0[89].*|02x1[0-9].*|[0-9][3-9]x*) 100 so='so' 101 case "$dlext" in 102 '') dlext='so' ;; 103 esac 104 ;; 105 *) 106 so='dll' 107 case "$dlext" in 108 '') dlext='dll' ;; 109 esac 110 ;; 111 esac 112 libperl="libperl.$so" 113 ccflags="$ccflags -D_SHR_ENVIRON -DPERL_EXTERNAL_GLOB -qexportall -qdll -qxplink" 114 cccdlflags='-c -qexportall -qxplink -qdll' 115 # The following will need to be modified for the installed libperl.x. 116 # The modification to Config.pm is done by the installperl script after the build and test. 117 ccdlflags="-qxplink -qdll `pwd`/libperl.x" 118 lddlflags="-qxplink -qdll `pwd`/libperl.x" 119 ;; 120esac 121# even on static builds using LIBPATH should be OK. 122case "$ldlibpthname" in 123'') ldlibpthname=LIBPATH ;; 124esac 125 126# The following should always be used 127d_oldpthreads='define' 128 129# Header files to include. 130# You can override these with Configure -Ui_time -Ui_systime -Dd_pthread_atfork. 131case "$i_time" in 132'') i_time='define' ;; 133esac 134case "$i_systime" in 135'') i_systime='define' ;; 136esac 137case "$d_pthread_atfork" in 138'') d_pthread_atfork='undef' ;; 139esac 140case "$d_pthread_atfork" in 141'') d_pthread_atfork='undef' ;; 142esac 143 144# (from aix.sh) 145# uname -m output is too specific and not appropriate here 146# osname should come from Configure 147# You can override this with Configure -Darchname='s390' but please don't. 148case "$archname" in 149'') archname="$osname" ;; 150esac 151 152# We have our own cppstdin script. This is not a variable since 153# Configure sees the presence of the script file. 154# We put system header -D definitions in so that Configure 155# can find the shmat() prototype in <sys/shm.h> and various 156# other things. Unfortunately, cppflags occurs too late to be of 157# value external to the script. This may need to be revisited 158# under a compiler other than c89. 159case "$usedl" in 160define) 161echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -D_SHR_ENVIRON -E -Wc,"LANGLVL(DOLLARINNAMES)",NOLOC ${1+"$@"} .$$.c | fgrep -v "??="; rm .$$.c' > cppstdin 162 ;; 163*) 164echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -E -Wc,"LANGLVL(DOLLARINNAMES)",NOLOC ${1+"$@"} .$$.c | fgrep -v "??="; rm .$$.c' > cppstdin 165 ;; 166esac 167 168# 169# Note that Makefile.SH employs a bare yacc command to generate 170# perly.[hc], hence you may wish to: 171# 172# alias yacc='myyacc' 173# 174# Then if you would like to use myyacc and skip past the 175# following warnings try invoking Configure like so: 176# 177# sh Configure -Dbyacc=yacc 178# 179# This trick ought to work even if your yacc is byacc. 180# 181if test "X$byacc" = "Xbyacc" ; then 182 if test -e /etc/yyparse.c ; then 183 : we should be OK - perhaps do a test -r? 184 else 185 cat <<EOWARN >&4 186 187Warning. You do not have a copy of yyparse.c, the default 188yacc parser template file, in place in /etc. 189EOWARN 190 if test -e /samples/yyparse.c ; then 191 cat <<EOWARN >&4 192 193There does appear to be a template file in /samples though. 194Please run: 195 196 cp /samples/yyparse.c /etc 197 198before attempting to Configure the build of $package. 199 200EOWARN 201 else 202 cat <<EOWARN >&4 203 204There does not appear to be one in /samples either. 205If you feel you can make use of an alternate yacc-like 206parser generator then please read the comments in the 207hints/os390.sh file carefully. 208 209EOWARN 210 fi 211 exit 1 212 fi 213fi 214 215# Most of the time gcvt() seems to work fine but 216# sometimes values like 0.1, 0.2, come out as "10", "20", 217# a trivial Perl demonstration snippet is 'print 0.1'. 218# The -W 0,float(ieee) seems to be the switch breaking gcvt(). 219# sprintf() seems to get things right(er). 220gconvert_preference=sprintf 221 222# Configure gets these wrong for some reason. 223d_gethostbyaddr_r='undef' 224d_gethostbyname_r='undef' 225d_gethostent_r='undef' 226 227# The z/OS C compiler compiler supports the attribute keyword, but in a 228# limited manner. 229# 230# Ideally, Configure's tests should test the attributes as they are expected 231# to be used in perl, and, ideally, those tests would fail on z/OS. 232# Until then, just tell Configure to ignore the attributes. Currently, 233# Configure thinks attributes are supported because it does not recognize 234# warning messages like this: 235# 236# INFORMATIONAL CCN4108 ./proto.h:4534 The use of keyword '__attribute__' is non-portable. 237 238d_attribute_deprecated='undef' 239d_attribute_format='undef' 240d_attribute_malloc='undef' 241d_attribute_nonnull='undef' 242d_attribute_noreturn='undef' 243d_attribute_pure='undef' 244d_attribute_unused='undef' 245d_attribute_warn_unused_result='undef' 246 247# nan() is in libm but doesn't work as expected: nan("") or nan("0") 248# returns zero, not a nan: 249# http://www-01.ibm.com/support/knowledgecenter/SSLTBW_1.12.0/com.ibm.zos.r12.bpxbd00/nan.htm%23nan?lang=en 250# contrast with e.g. 251# http://www.cplusplus.com/reference/cmath/nan-function/ 252# (C++ but C99 math agrees) 253# XXX: Configure scan for proper behavior 254d_nan='undef' 255 256# Configures says this exists, but it doesn't work properly. See 257# <54DCE073.4010100@khwilliamson.com> 258d_dir_dd_fd='undef' 259