diff --git a/README.os390 b/README.os390 index 3cadfe296a8f..fb865c27faa5 100644 --- a/README.os390 +++ b/README.os390 @@ -15,315 +15,213 @@ on z/OS Unix System Services. =head1 DESCRIPTION -This is a ported Perl for z/OS. It has been tested on z/OS 2.4 and -should work fine with z/OS 2.5. -It may work on other versions or releases, but those are -the ones it has been tested on. - -The native character set for z/OS is EBCDIC, but it can also run in ASCII mode. -Perl can support either, but you have to compile it explicitly for one or the -other. You could have both an ASCII perl, and an EBCDIC perl on the same -machine. If you use ASCII mode and an ASCII perl, the Encode module shipped -with perl can be used to translate files from various EBCDIC code pages for -handling by perl, and then back on output - -This document describes how to build a 64-bit Dynamic Perl, either ASCII or -EBCDIC. You can interactively choose other configurations, as well as many -other options in the Configure script that is run as part of the build -process. You may need to carry out some system configuration tasks before -running Configure, as detailed below. +Perl on z/OS has been tested on z/OS 3.1. +It may work on other versions or releases. + +The native character set for z/OS is EBCDIC (code page 1047 in North America), +but recent OS releases have added the ability for individual processes to run +in ASCII mode. This mode works reasonably well, but there can be glitches. It +is under active development by IBM. + +For background on the ASCII vs EBCDIC modes, see +L + +Perl can support either mode, but you have to compile it explicitly for one or +the other. You could have both an ASCII perl, and an EBCDIC perl on the same +machine. If you use an ASCII perl, the Encode module shipped with perl can be +used to translate files from various EBCDIC code pages for handling by perl, +and then back on output. The C command in z/OS, may also be useful. + +z/OS has a native shell much like C or C, and many commands that are +similar to ones in Linux, such as C. Available options for these may +differ from the Linux ones. But not many Open Source tools that a Linux user +might be accustomed to using come with base z/OS. + +However, there is now an B initiative to bring many such +tools to z/OS users. L brings you to its landing +page. If an ASCII perl is sufficient for your needs, you should obtain it +through them, at L. + +There aren't any known 32-bit z/OS systems in existence anymore, so this +document describes how to build a 64-bit EBCDIC Perl. + +Most CPAN modules have been written assuming ASCII. They may or may not work +on EBCDIC. What we have found is that many do work, but may not appear to pass +all their tests. They can be used in the areas that they do work in. Also the +failure may not actually be a real failure, but a problem with the test. This +is because the typical test compares results with expected values which the +test's author often hard-coded assuming ASCII. For example, if you do a plain +C, ASCII will have the digits first, uppercase letters next, and +lowercase last. EBCDIC sorts the opposite. If your application really does +need the ASCII ordering, the module won't give the proper results; but often +you just need a consistent sorting, and for that purpose the module works +perfectly well. + +Perl itself is shipped with some CPAN modules included. Some of these do not +work well on EBCDIC, and therefore testing of them is suppressed. You can see +which by examining F and searching for EBCDIC. Fixing these is under +active development. =head2 Tools -You will want to get GNU make 4.1 or later. GNU make can be downloaded from a -port that Rocket Software provides. You will need the z/OS c99 compiler from -IBM (though xlc in c99 mode without optimization turned on works in EBCDIC). +The tools required for building perl are available as: -If you want the latest development version of Perl, you will need git. -You can use git on another platform and transfer the result via sftp or ftp to -z/OS. But there is a z/OS native git client port available through Rocket -Software. +=over -You may also need the gunzip client port that Rocket Software provides to unzip -any zipped tarball you upload to z/OS. +=item * native commands on z/OS -=head2 Building a 64-bit Dynamic ASCII Perl +z/OS has versions of many tools that come with the Linux OS. Some of these +don't have as many options as replacements available in the next group: -For building from an official stable release of Perl, go to -L and choose any one of the -"Download latest stable source" buttons. This will get you a tarball. The -name of that tarball will be something like 'perl-V.R.M,tar,gz', where V.R.M is -the version/release/modification of the perl you are downloading. Do +=item * through the zopen community - gunzip perl-V.R.M.tar.gz - -Then one of: - - tar -xvf perl-V.R.M.tar - - pax -r -f perl-V.R.M.tar - -Either of these will create the source directory. You can rename it to -whatever you like; for these instructions, 'perl' is assumed to be the name. +C and C for example. Also you can get C itself. -If instead you want the latest unstable development release, using the native -git on z/OS, clone Perl: +=item * at no cost from IBM - git clone https://github.com/Perl/perl5.git perl +L. These +include GNU make, which you will need. -Either way, once you have a 'perl' directory containing the source, cd into it, -and tag all the code as ASCII: +=back - cd perl - chtag -R -h -t -cISO8859-1 * +=head2 Building EBCDIC Perl on z/OS -Configure the build environment as 64-bit, Dynamic, ASCII, development, -deploying it to F: +=head3 Getting perl source - export PATH=$PWD:$PATH - export LIBPATH=$PWD:$PATH - ./Configure -Dprefix=/usr/local/perl/ascii -des -Dusedevel \ - -Duse64bitall -Dusedl +You'll first need a tarball. At the moment this is written, there are no +EBCDIC tarballs published, but it is easy to create one given that you have +access to a system with any relatively modern perl. -If you are building from a stable source, you don't need "-Dusedevel". -(If you run Configure without options, it will interactively ask you about -every possible option based on its probing of what's available on your -particular machine, so you can choose as you go along.) +Then get an ASCII release tarball. Choose one of the following: -Run GNU make to build Perl +=over 4 - make +=item Official stable release -Run tests to ensure Perl is working correctly. Currently, there are about a -dozen failing tests out of nearly 2500 +Go to L and choose any one of the "Download +latest Linuxy stable source" buttons. The name of that tarball will be +something like I, where V.R.M is the +version/release/modification of the perl you are downloading. Do - make test_harness + gunzip perl-V.R.M.tar.gz + pax -r -f perl-V.R.M.tar -Install Perl into F: +This will create a directory named I, which you can rename to be +whatever you want. The instructions below assume you choose F. - make install +=item Development release -=head2 Building a 64-bit Dynamic EBCDIC Perl +If instead you want the latest unstable development release, clone Perl: -You will need a working perl on some box with connectivity to the destination -machine. On z/OS, it could be an ASCII perl, or a previous EBCDIC one. -Many machines will already have a pre-built perl already running, or one can -easily be downloaded from L. + git clone https://github.com/Perl/perl5.git perl -Follow the directions above in "Building a 64-bit Dynamic ASCII Perl" as far as -getting a populated 'perl' directory. Then come back here to proceed. +=back -The downloaded perl will need to be converted to 1047 EBCDIC. To do this: +Either way, after getting the C directory populated, do cd perl - Porting/makerel -e - -If the Porting/makerel step fails with an error that it can not issue the tar -command, proceed to issue the command interactively, where V.R.M is the -version/release/modification of Perl you are uploading: - - cd ../ - tar cf - --format=ustar perl-V.R.M | gzip --best > perl-V.R.M.tar.gz + perl Porting/makerel -c -e -Use sftp to upload the zipped tar file to z/OS: +This will use whatever perl already is on the system to create an EBCDIC +tarball named I. - sftp - cd /tmp - put perl-V.R.M.tar.gz +Use C or C to copy the tarball to the target z/OS system. Then, from +the directory where it is located, do -Unzip and untar the zipped tar file on z/OS: - - cd /tmp gunzip perl-V.R.M.tar.gz - -Then one of: - - tar -xvf perl-V.R.M.tar - pax -r -f perl-V.R.M.tar + mv perl-V.R.M perl + cd perl -You now have the source code for the EBCDIC Perl on z/OS and can proceed to -build it. This is analagous to how you would build the code for ASCII, but -note: you B tag the code but instead leave it untagged. +=head3 Configuring perl -Configure the build environment as 64-bit, Dynamic, native, development, -deploying it to F: +Now it is time to Configure it to your needs. If you need a dynamically +loading perl (see below), first do: export PATH=$PWD:$PATH - export LIBPATH=$PWD:$PATH - ./Configure -Dprefix=/usr/local/perl/ebcdic -des -Dusedevel \ - -Duse64bitall -Dusedl + export LIBPATH=$PWD:$LIBPATH -If you are building from a stable source, you don't need "-Dusedevel". -(If you run Configure without options, it will interactively ask you about -every possible option based on its probing of what's available on your -particular machine, so you can choose as you go along.) +Then run Configure -Run GNU make to build Perl - - make + ./Configure -Dprefix=/path-to/install/directory -des \ + OTHER-OPTIONS-AS-BELOW -Run tests to ensure Perl is working correctly. - - make test_harness - -You might also want to have GNU groff for OS/390 installed before -running the "make install" step for Perl. - -Install Perl into F: - - make install - -EBCDIC Perl is still a work in progress. All the core code works as far as we -know, but various modules you might want to download from CPAN do not. The -failures range from very minor to catastrophic. Many of them are simply bugs -in the tests, with the module actually working properly. This happens because, -for example, the test is coded to expect a certain character ASCII code point; -when it gets the EBCDIC value back instead, it complains. But the code -actually worked. Other potential failures that aren't really failures stem -from checksums coming out differently, since C, for example, has a different -bit representation between the character sets. A test that is expecting the -ASCII value will show failure, even if the module is working perfectly. Also -in sorting, uppercase letters come before lowercase letters on ASCII systems; -the reverse on EBCDIC. - -Some CPAN modules come bundled with the downloaded perl. And a few of those -have yet to be fixed to pass on EBCDIC platforms. As a result they are skipped -when you run 'make test'. The current list is: - - Archive::Tar - Config::Perl::V - CPAN::Meta - CPAN::Meta::YAML - Digest::MD5 - Digest::SHA - Encode - ExtUtils::MakeMaker - ExtUtils::Manifest - HTTP::Tiny - IO::Compress - IPC::Cmd - JSON::PP - libnet - MIME::Base64 - Module::Metadata - PerlIO::via-QuotedPrint - Pod::Checker - podlators - Pod::Simple - Socket - Test::Harness - -See also F for other potential gotchas. - -=head2 Setup and utilities for Perl on OS/390 - -This may also be a good time to ensure that your F file -and either your F or F files are in place. -The IBM document that describes such USS system setup issues is -"z/OS UNIX System Services Planning" - -For successful testing you may need to turn on the sticky bit for your -world readable /tmp directory if you have not already done so (see man chmod). - -=head2 Useful files for trouble-shooting - -If your configuration is failing, read hints/os390.sh -This file provides z/OS specific options to direct the build process. - -=head3 Shell - -A message of the form: +C<-d> means to use the default configuration values. This is important, as we +have set those up specifically for z/OS. - (I see you are using the Korn shell. Some ksh's blow up on Configure, - mainly on older exotic systems. If yours does, try the Bourne shell - instead.) +C<-e> means to continue on to the bitter end, not stopping the process early. -is nothing to worry about at all. +C<-s> means to avoid unnecessary output verbiage. This parameter is optional. -=head3 Dynamic loading +If the perl is an unstable development release, add C<-Dusedevel> as one of the +C -Dynamic loading is required if you want to use XS modules from CPAN (like -DBI (and DBD's), JSON::XS, and Text::CSV_XS) or update CORE modules from -CPAN with newer versions (like Encode) without rebuilding all of the perl -binary. +If you think you may want to debug the perl, add C<-DDEBUGGING -Aoptimize=-g3 +-Aoptimize=-ggdb3>. -The instructions above will create a dynamic Perl. If you do not want to -use dynamic loading, remove the -Dusedl option. -See the comments in hints/os390.sh for more information on dynamic loading. +To silence some unnecessary compilation warnings, you can add +C<-Accflags=-Wno-deprecated>. -=head3 Optimizing +If you will want to use modules from CPAN (like C (and Cs), +C, and C), consider using dynamic loading. This isn't +necessary if all such modules you might want are written only in Perl, but if +some of them are compiled (they contain XS code), you'll either need to +recompile all of perl when you add one, or set it up initially to use dynamic +loading. To do this, add C<-Dusedl> to the Configure options. -Optimization has not been turned on yet. There may be issues if Perl -is optimized. +When Configure is run using the z/OS native shell, you'll see a message like -=head2 Build Anomalies with Perl on OS/390 + (I see you are using the Korn shell. Some ksh's blow up on Configure, + mainly on older exotic systems. If yours does, try the Bourne shell + instead.) -"Out of memory!" messages during the build of Perl are most often fixed -by re building the GNU make utility for OS/390 from a source code kit. +The native shell looks like C, and it works fine, so just ignore the +message. -Within USS your F or F<$HOME/.profile> may limit your ulimit -settings. Check that the following command returns reasonable values: +F currently will output errors in finding the header dependencies +various object files have. This just means that they may be recompiled +unnecessarily. - ulimit -a +=head3 Building perl -To conserve memory you should have your compiler modules loaded into the -Link Pack Area (LPA/ELPA) rather than in a link list or step lib. +Run GNU make to build Perl -If the compiler complains of syntax errors during the build of the -Socket extension then be sure to fix the syntax error in the system -header /usr/include/sys/socket.h. + make -=head2 Testing Anomalies with Perl on OS/390 +This will likely crash in making the Encode module. To work around that, +execute the following command -The "make test" step runs a Perl Verification Procedure, usually before -installation. You might encounter STDERR messages even during a successful -run of "make test". Here is a guide to some of the more commonly seen -anomalies: + chtag -tc IBM-1047 cpan/Encode/Makefile -=head3 Out of Memory (31-bit only) +and rerun C. -Out of memory problems should not be an issue, unless you are attempting to build -a 31-bit Perl. +=head3 Testing perl -If you _are_ building a 31-bit Perl, the constrained environment may mean you -need to change memory options for Perl. -In addition to the comments -above on memory limitations it is also worth checking for _CEE_RUNOPTS -in your environment. Perl now has (in miniperlmain.c) a C #pragma for 31-bit only -to set CEE run options, but the environment variable wins. + TEST_JOBS=n make test_harness -The 31-bit C code asks for: +where I is the number of tests to run in parallel. On hardware that is +single core, 2 or 3 work well. A common value (if you aren't crowding out +other users) is to set I to twice the number of cores available, plus 1. - #pragma runopts(HEAP(2M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON)) +Some tests currently fail. The only ones that are real known errors are +in F. -The important parts of that are the second argument (the increment) to HEAP, -and allowing the stack to be "Above the (16M) line". If the heap -increment is too small then when perl (for example loading unicode/Name.pl) tries -to create a "big" (400K+) string it cannot fit in a single segment -and you get "Out of Memory!" - even if there is still plenty of memory -available. +The failing tests in C, C, +F, and F are false alarms. -A related issue is use with perl's malloc. Perl's malloc uses C -to get memory, and C is limited to the first allocation so in this -case something like: +=head3 Installing perl - HEAP(8M,500K,ANYWHERE,KEEP,8K,4K) + make install -is needed to get through the test suite. +will install perl into the directory you gave in the command -=head2 Usage Hints for Perl on z/OS + ./Configure -Dprefix=/path-to/install/directory ... -When using Perl on z/OS please keep in mind that the EBCDIC and ASCII -character sets are different. See L for more on such character -set issues. Perl builtin functions that may behave differently under -EBCDIC are also mentioned in the perlport.pod document. +=head2 Optimization -If you are having trouble with square brackets then consider switching your -rlogin or telnet client. Try to avoid older 3270 emulators and ISHELL for -working with Perl on USS. +Optimization has not been tested. -=head2 Modules and Extensions for Perl on z/OS (Static Only) +=head2 Installing other modules Pure Perl (that is non XS) modules may be installed via the usual: @@ -346,36 +244,12 @@ building a static perl + XS extension boils down to: make install make -f Makefile.aperl inst_perl MAP_TARGET=perl -=head2 Running Perl on z/OS +=head2 Running EBCDIC Perl on z/OS To run the 64-bit Dynamic Perl environment, update your PATH and LIBPATH to include the location you installed Perl into, and then run the perl you installed as perlV.R.M where V/R/M is the Version/Release/Modification level of the current development level. -If you are running the ASCII/EBCDIC Bi-Modal Perl environment, you also need to -set up your ASCII/EBCDIC Bi-Modal environment variables, and ensure any Perl -source code you run is tagged appropriately as ASCII or EBCDIC using -"chtag -t -c": - -=over - -=item For ASCII Only: - - export _BPXK_AUTOCVT=ON - export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG),POSIX(ON)" - export _TAG_REDIR_ERR="txt" - export _TAG_REDIR_IN="txt" - export _TAG_REDIR_OUT="txt" - -=item For ASCII or EBCDIC: - - export PATH=/usr/local/perl/ascii:$PATH - export LIBPATH=/usr/local/perl/ascii/lib:$LIBPATH - perlV.R.M args - -=back - -If tcsh is your login shell then use the setenv command. =head1 AUTHORS @@ -388,14 +262,10 @@ Thanks to John Goodyear for dynamic loading help. Mike Fulton and Karl Williamson have provided updates for UTF8, DLL, 64-bit and ASCII/EBCDIC Bi-Modal support -=head1 OTHER SITES - -L provides documentation and tools -for building various z/OS Perl configurations and has some useful tools in the -'bin' directory you may want to use for building z/OS Perl yourself. - =head1 HISTORY +Updated 25 May 2026 to reflect Perl v5.44 and + Updated 24 December 2021 to enable initial ASCII support Updated 03 October 2019 for perl-5.33.3+ @@ -417,3 +287,6 @@ release of Perl. =cut +(A blog +post about its early development is here +L.) diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL index 77aa19b8dc39..89d21b8a2930 100644 --- a/ext/Errno/Errno_pm.PL +++ b/ext/Errno/Errno_pm.PL @@ -2,7 +2,7 @@ use ExtUtils::MakeMaker; use Config; use strict; -our $VERSION = "1.38"; +our $VERSION = "1.39"; my %err = (); @@ -58,7 +58,8 @@ sub process_file { warn "Cannot open '$file'"; return; } - } elsif ($Config{gccversion} ne '' && $^O ne 'darwin' ) { + } + elsif ($Config{gccversion} ne '' && $^O ne 'darwin' && $^O ne 'os390') { # With the -dM option, gcc outputs every #define it finds unless(open(FH,"$Config{cc} -E -dM $Config{cppflags} $file |")) { warn "Cannot open '$file'"; @@ -245,7 +246,16 @@ sub write_errno_pm { $inhibit_linemarkers; open(CPPO,"$cpp errno.c |") or die "Cannot run '$cpp errno.c'"; - } else { + } elsif ($^O eq 'os390') { + # XXX This could be because the pipe is reading with the wrong + # character set, so there may be a better way to solve this + my $cpp = default_cpp() . $inhibit_linemarkers; + $cpp =~ s/ $Config{cppminus} \s* $ //x; + system "$cpp errno.c > errno.i" ; + open(CPPO,"<", 'errno.i') or die "Cannot open errno.i"; + unlink 'errno.i'; + } + else { my $cpp = default_cpp() . $inhibit_linemarkers; open(CPPO,"$cpp < errno.c |") or die "Cannot exec $cpp"; diff --git a/hints/os390.sh b/hints/os390.sh index 56f247bfcfff..5e1831d688cb 100644 --- a/hints/os390.sh +++ b/hints/os390.sh @@ -17,27 +17,20 @@ # z/OS 2.4 Support added thanks to: # Mike Fulton # Karl Williamson +# Igor Todorovsky # -# The z/OS 'cc' and 'ld' are insufficient for our needs, so we use c99 instead -# c99 has compiler options specified via standard Unix-style options, but some -# options need to be specified using -Wc, or -Wl, -me=$0 -case "$cc" in -'') cc='c99' ;; -esac -case "$ld" in -'') ld='c99' ;; -esac - # Prepend your favorites with Configure -Dccflags=your_favorites # This overrides the name the compiler was called with. 'ext' is required for # "unicode literals" to be enabled -def_os390_cflags='-qlanglvl=extc1x'; +def_os390_cflags='-std=c99 -D_EXT -fvisibility=default -D_POSIX_C_SOURCE=200809L -D_XPLATFORM_SOURCE=1'; # For #ifdefs in code def_os390_defs="-DOS390 -DZOS"; +def_os390_defs="$def_os390_defs -Duserelocatableinc -Duse64bitall" +use64bitall=define + # Turn on POSIX compatibility modes # https://www.ibm.com/support/knowledgecenter/SSLTBW_2.4.0/com.ibm.zos.v2r4.bpxbd00/ftms.htm def_os390_defs="$def_os390_defs -D_ALL_SOURCE"; @@ -46,31 +39,41 @@ def_os390_defs="$def_os390_defs -D_ALL_SOURCE"; # For 64-bit addressing mode, the standard linkage works well case "$use64bitall" in -'') - def_os390_cflags="$def_os390_cflags -qxplink" - def_os390_cccdlflags="-qxplink" - def_os390_ldflags="-qxplink" -# defines a BSD-like socket interface for the function prototypes and structures involved (not required with 64-bit) - def_os390_defs="$def_os390_defs -D_OE_SOCKETS"; +'') echo "32-bit compilation not currently supported" >&4 + # Though it could easily be added. IBM says no such hardware now exists + exit 1; ;; *) - def_os390_cflags="$def_os390_cflags -Wc,lp64" - def_os390_cccdlflags="$def_os390_cflags -Wl,lp64" - def_os390_ldflags="-Wl,lp64" + # Use clang for 64-bit + case "$cc" in + '') cc='clang' ;; + esac + case "$ld" in + '') ld='clang' ;; + esac + def_os390_cflags="$def_os390_cflags -m64" + def_os390_cccdlflags="$def_os390_cflags $def_os390_cflags" + def_os390_ldflags="-Wl,-bedit=no -m64" esac +arch_main_objs="" +archobjs="os390.o" + +# Help make find os390.c +test -h os390.c || ln -s os390/os390.c os390.c + myfirstchar=$(od -A n -N 1 -t x $me | xargs | tr [:lower:] [:upper:] | tr -d 0) if [ "${myfirstchar}" = "23" ]; then # 23 is '#' in ASCII unset ebcdic - def_os390_cflags="$def_os390_cflags -qascii" + def_os390_cflags="$def_os390_cflags -fzos-le-char-mode=ascii -I /data/zopen/usr/local/include" else ebcdic=true + def_os390_cflags="$def_os390_cflags -fzos-le-char-mode=ebcdic" + def_os390_cflags="$def_os390_cflags -fexec-charset=IBM-1047" fi # Export all externally defined functions and variables in the compilation # unit so that a DLL application can use them. -def_os390_cflags="$def_os390_cflags -qexportall"; -def_os390_cccdlflags="$def_os390_cccdlflags -qexportall" # 3296= #include file not found; # 4108= The use of keyword &1 is non-portable @@ -79,9 +82,8 @@ def_os390_cccdlflags="$def_os390_cccdlflags -qexportall" # INFORMATIONAL CCN4108 ./proto.h:4534 The use of keyword '__attribute__' is non-portable. # 3159= Bit field type specified for &1 is not valid. Type &2 assumed. # We do not care about this warning - the bit field is 1 bit and is being specified on something smaller than an int -def_os390_cflags="$def_os390_cflags -qhaltonmsg=3296:4108 -qsuppress=CCN3159 -qfloat=ieee" -def_os390_defs="$def_os390_defs -DMAXSIG=39 -DNSIG=39"; # maximum signal number; not furnished by IBM +def_os390_defs="$def_os390_defs -DMAXSIG=42 -DNSIG=42"; # maximum signal number; not furnished by IBM def_os390_defs="$def_os390_defs -DOEMVS"; # is used in place of #ifdef __MVS__ # ensure that the OS/390 yacc generated parser is reentrant. @@ -97,7 +99,7 @@ def_os390_defs="$def_os390_defs -D_OPEN_THREADS=3 -D_UNIX03_SOURCE=1 -D_AE_BIMOD # Combine -D with cflags case "$ccflags" in '') ccflags="$def_os390_cflags $def_os390_defs" ;; -*) ccflags="$ccflags $def_os390_cflags $def_os390_defs" ;; +*) ccflags="$ccflags $cppflags $def_os390_cflags $def_os390_defs" ;; esac # Turning on optimization causes perl to not even compile from miniperl. You @@ -109,7 +111,7 @@ esac # To link via definition side decks we need the dll option # You can override this with Configure -Ucccdlflags or somesuch. case "$cccdlflags" in -'') cccdlflags="$def_os390_cccdlflags -Wl,dll";; +'') cccdlflags="$def_os390_cccdlflags -shared";; esac case "$so" in @@ -220,26 +222,19 @@ case "$archname" in '') archname="$osname" ;; esac -# We have our own cppstdin script. This is not a variable since -# Configure sees the presence of the script file. -# We put system header -D definitions in so that Configure -# can find the shmat() prototype in and various -# other things. Unfortunately, cppflags occurs too late to be of -# value external to the script. This may need to be revisited -# -# khw believes some of this is obsolete. DOLLARINNAMES allows '$' in variable -# names, for whatever reason -# NOLOC says to use the 1047 code page, and no locale -case "$usedl" in -define) -echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_ALL_SOURCE -D_SHR_ENVIRON -E -Wc,"LANGLVL(DOLLARINNAMES)",NOLOC ${1+"$@"} .$$.c | fgrep -v "??="; rm .$$.c' > cppstdin - ;; -*) -echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_ALL_SOURCE -E -Wc,"LANGLVL(DOLLARINNAMES)",NOLOC ${1+"$@"} .$$.c | fgrep -v "??="; rm .$$.c' > cppstdin - ;; -esac +# Some header files on z/OS have trigraphs in them that clang doesn't handle +# without this option. +cppflags="-trigraphs" + +# Suppress the trigraph warnings, and some headers have pragmas that clang +# isn't familiar with +def_os390_cflags="$def_os390_cflags -Wno-trigraphs -Wno-unknown-pragmas" + +# The compilation of shm.h that is supposed to show if that file includes a +# prototype definition currently results in garbage (reason unknown) so the +# grep fails. +d_shmatprototype='define' -# # Note that Makefile.SH employs a bare yacc command to generate # perly.[hc], hence you may wish to: # diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index 3626a8ff8b75..3f5520570232 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -77,8 +77,8 @@ cpanp(1) CPANPLUS crypt(3) Crypt::PRNG -Crypt::URandom Crypt::SysRandom +Crypt::URandom ctime(3) curl(1) Dancer @@ -429,7 +429,6 @@ pod/perlmacosx.pod Verbatim line length including indents exceeds 78 by 3 pod/perlmroapi.pod ? Should you be using L<...> instead of 1 pod/perlos2.pod ? Should you be using L<...> instead of 1 pod/perlos2.pod Verbatim line length including indents exceeds 78 by 5 -pod/perlos390.pod Verbatim line length including indents exceeds 78 by 1 pod/perlperf.pod Verbatim line length including indents exceeds 78 by -1 pod/perlrun.pod Verbatim line length including indents exceeds 78 by 3 pod/perlsolaris.pod Verbatim line length including indents exceeds 78 by -1