mirror of
https://github.com/mirror/make.git
synced 2026-08-19 08:23:28 +08:00
1eff20f6f64d00f588c218e265f8d3a81a8fb00b
Rework the single "?=" operator to instead allow a "?" modifier to be prepended to ANY assignment operator. If "?" is given then the variable is assigned (using whatever operator comes next) if and only if the variable is not already defined. If it is defined then no action is taken (the right-hand side is not expanded, etc.) * NEWS: Announce this new feature. * doc/make.texi: Modify the documentation around assignment operators. * src/variable.h: Remove the f_conditional variable flavor. (do_variable_definition): Add an argument specifying conditional. * src/variable.c (parse_variable_definition): Use the existing flag "conditional" to remember if we saw "?" rather than the flavor. When we see "?" skip it and continue trying to parse an assignment. (try_variable_definition): Pass condition to do_variable_definition(). (initialize_file_variables): Ditto. (do_variable_definition): Check for conditional up-front: quit if set. Remove handling of obsolete f_conditional flavor. * src/read.c (eval_makefile): MAKEFILE_LIST is not conditional. (do_define): Unset conditional for define with no operator. Pass the conditional flag to do_variable_definition(). (construct_include_path): .INCLUDE_DIRS is not conditional. * src/load.c (load_file): .LOADED is not conditional. * tests/scripts/variables/conditional: Add new tests.
-*-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.
Description
Languages
C
49.2%
Roff
25.8%
Perl
18.7%
Shell
2.4%
M4
1.2%
Other
2.6%