No description
Find a file
Dmitry Goncharov 034f862361 [SV 66037] Avoid hang/crash from MAKEFLAGS=... on command line
Make enters an infinite loop when some option and MAKEFLAGS=<value>
are specified on the command line.  For example,
    $ make -r MAKEFLAGS=hello=world

If decode_switches() runs handle_non_switch_argument() from within
the getopt() loop, it would recursively call decode_switches() to
enter a new getopt() loop, corrupting the state of the outer loop.

* src/main.c (decode_switches): Save up non-option arguments and run
handle_non_switch_argument() only after we're done with getopt().
* tests/scripts/variables/MAKEFLAGS: Add tests.
2024-08-04 16:00:48 -04:00
doc
gl
mk
po
scripts
src [SV 66037] Avoid hang/crash from MAKEFLAGS=... on command line 2024-08-04 16:00:48 -04:00
tests [SV 66037] Avoid hang/crash from MAKEFLAGS=... on command line 2024-08-04 16:00:48 -04:00
.ccls
.clangd
.dir-locals.el
.gitignore
AUTHORS
autogen.sh
autopull.sh
Basic.mk.template
bootstrap
bootstrap-funclib.sh
bootstrap.bat
bootstrap.conf
build.cfg.in
build.sh
build_w32.bat
builddos.bat
ChangeLog.1
ChangeLog.2
ChangeLog.3
configure.ac
COPYING
maintMakefile
make-gdb.py
Makefile.am
makefile.com
NEWS
prepare_vms.com
README.customs
README.DOS
README.git
README.in
README.OS2
README.VMS
README.W32
README.zOS
TODO.private
vms_export_symbol_test.com

                                                                     -*-text-*-
GNU Make has been ported to z/OS, tested on z/OS V2R4.


PREREQUISITES
-------------
Building GNU Make requires certain tools be installed on your z/OS system.
These tools can be downloaded from: https://github.com/ZOSOpenTools
For detailed instructions on how to set up these tools, visit
https://zosopentools.github.io/meta/#/Guides/Pre-req

You will need curl, tar, and gzip to download and unpack the GNU Make release
package, but presumably you've already worked this out if you're reading this
document!

You will need the IBM C/C++ compiler.  You can download a web deliverable
add-on feature to your XL C/C++ compiler here:
https://www-40.ibm.com/servers/resourcelink/svc00100.nsf/pages/xlCC++V241ForZOsV24

Alternatively, you can install and manage C/C++ for Open Enterprise Languages
on z/OS using RedHat OpenShift Container Platform and IBM Z and Cloud
Modernization Stack.

GNU Make has a dependency on the ZOSLIB library, which is documented here:
https://zosopentools.github.io/meta/#/Guides/Zoslib.

To obtain the latest release of zoslib, you can download it from here:
https://github.com/ZOSOpenTools/zoslibport/releases.


BUILDING
--------
If you are trying to build from a checked-out Git workspace, see README.git.

Before building GNU Make, you will need to ensure that the following
environment variables are set, to turn on z/OS enhanced ASCII support:

  export _BPXK_AUTOCVT=ON
  export _CEE_RUNOPTS="$_CEE_RUNOPTS FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)"
  export _TAG_REDIR_ERR=txt
  export _TAG_REDIR_IN=txt
  export _TAG_REDIR_OUT=txt

To ensure proper functioning of xlclang, set the following environment
variables before building:

  export _CC_CCMODE=1
  export _C89_CCMODE=1
  export _CXX_CCMODE=1

Set PATH_TO_ZOSLIB to the location of your zoslib installation; e.g.:

  PATH_TO_ZOSLIB=$HOME/zopen/prod/zoslib

Invoke ./configure as follows:

  ./configure \
      CC=xlclang \
      CPPFLAGS="-DNSIG=42 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE -D_OPEN_SYS_FILE_EXT=1 -D_AE_BIMODAL=1 -D_ENHANCED_ASCII_EXT=0xFFFFFFF -DZOSLIB_OVERRIDE_CLIB=1" \
      CFLAGS="-qascii -std=gnu11 -qnocsect -qenum=int -I$PATH_TO_ZOSLIB/include" \
      LDFLAGS="-L$PATH_TO_ZOSLIB/lib" \
      LIBS="-lzoslib $PATH_TO_ZOSLIB/lib/CXXRT64.x"

If you have an instance of make already available you can build with:

  make

If not, you can build with:

  ./build.sh


TESTING
-------
To run the regression tests you'll need to install Perl and enable it.
Then you can run:

  ./make check


INSTALLING
----------
Copy the "make" program to wherever you want it to be installed, on your PATH.