summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip McGrath <philip@philipmcgrath.com>2024-02-28 19:41:22 -0500
committerGitHub <noreply@github.com>2024-02-28 17:41:22 -0700
commitb8838c3280ef10e115236d2f7ac9ae857f83e268 (patch)
treebe5a3306f697f46b71406cad437e701b3d422a33
parentc46bd446b2c9d370069d05a48cebeb958fc09447 (diff)
Repairs and improvements for building with external dependencies (#807)
* configure: fix zlib and lz4 submodule checks Conditionals to skip the submodule checks were using the wrong variable names, so the checks were always skipped. The correct behavior is to perform the check unless given `ZLIB=<zlib>` or `LZ4=<lz4>`, as applicable. * configure: support `ZUO=<zuo>` Supplying `ZUO=<zuo>` skips the submodule check in `configure` and configures the generated makefile not to build or remove Zuo. * configure: support `STEXLIB=<stex>` For compatibility with older scripts, when not explicitly configured, continue to honor the `STEXLIB` environment variable at build time.
-rw-r--r--BUILDING5
-rw-r--r--build.zuo13
-rwxr-xr-xconfigure40
-rw-r--r--makefiles/Makefile.in6
4 files changed, 47 insertions, 17 deletions
diff --git a/BUILDING b/BUILDING
index 7b3dc9c8..9e9a268b 100644
--- a/BUILDING
+++ b/BUILDING
@@ -149,7 +149,8 @@ information on the supported options.
The generated makefile mostly just ensures that a `zuo` executable is
built in a `bin` directory, and then it defers the actual build work
to `zuo`, which uses the "main.zuo" file. If you have `zuo` installed,
-you can use `zuo` directly instead of `make`. In general, instead of
+you can use `zuo` directly instead of `make`: in that case, you may
+wish to use `./configure ZUO=<zuo>`. In general, instead of
the command `make X` to build target `X` as described below, you can
use `zuo . X` (or `bin/zuo . X` after `bin/zuo` is built).
@@ -333,7 +334,7 @@ The makefile supports several targets:
* `make clean`
Removes all built elements from the workarea, and then removes
- `bin/zuo`.
+ `bin/zuo` (unless configured with `ZUO=<zuo>`).
WINDOWS VIA COMMAND PROMPT
diff --git a/build.zuo b/build.zuo
index c21d2caa..c5896396 100644
--- a/build.zuo
+++ b/build.zuo
@@ -224,10 +224,15 @@
token))
(define stexlib
- (let ((found (assoc "STEXLIB" (hash-ref (runtime-env) 'env))))
- (if found
- (cdr found)
- (at-source "stex"))))
+ (let ([configured (hash-ref config 'STEXLIB "")]
+ [env (assoc "STEXLIB" (hash-ref (runtime-env) 'env))])
+ (cond
+ [(not (equal? "" configured))
+ configured]
+ [env
+ (cdr env)]
+ [else
+ (at-source "stex")])))
(define stex-sources
(source-tree stexlib))
diff --git a/configure b/configure
index 2b4b594e..782dd09b 100755
--- a/configure
+++ b/configure
@@ -93,6 +93,7 @@ default_warning_flags="-Wpointer-arith -Wall -Wextra -Wno-implicit-fallthrough"
CFLAGS_ADD=
zlibLib=
LZ4Lib=
+STEXLIB=
Kernel=KernelLib
buildKernelOnly=no
enableFrompb=yes
@@ -103,6 +104,7 @@ moreBootFiles=
preloadBootFiles=
alwaysUseBootFile=
skipSubmoduleUpdate=
+zuoExternal=
CONFIG_UNAME=`uname`
@@ -446,6 +448,12 @@ while [ $# != 0 ] ; do
LZ4=*)
LZ4Lib=`echo $1 | sed -e 's/^LZ4=//'`
;;
+ STEXLIB=*)
+ STEXLIB=`echo $1 | sed -e 's/^STEXLIB=//'`
+ ;;
+ ZUO=*)
+ zuoExternal=`echo $1 | sed -e 's/^ZUO=//'`
+ ;;
*)
echo "option '$1' unrecognized or missing an argument; try $0 --help"
exit 1
@@ -672,6 +680,8 @@ if [ "$help" = "yes" ]; then
echo " STRIP=<strip> executable stripper"
echo " ZLIB=<lib> link to <lib> instead of own zlib"
echo " LZ4=<lib> link to <lib> instead of own LZ4"
+ echo " STEXLIB=<stex> build docs with <stex> instead of own stex"
+ echo " ZUO=<zuo> build with <zuo> instead of own Zuo"
echo ""
echo "Available machine types: $machs"
echo ""
@@ -889,28 +899,39 @@ submod_instructions () {
exit 1
}
-if [ ! -f "$srcdir"/zuo/configure ] ; then
- submod_instructions 'Source in "zuo" is missing'
+if [ "${zuoExternal}" = "" ] ; then
+ if [ ! -f "$srcdir"/zuo/configure ] ; then
+ submod_instructions 'Source in "zuo" is missing'
+ fi
+ ZUO="bin/zuo"
+ RM_ZUO="rm -f bin/zuo"
+ ZUO_TARGET="bin/zuo"
+else
+ ZUO="${zuoExternal}"
+ RM_ZUO="@echo 'Not cleaning external ${zuoExternal}'"
+ ZUO_TARGET="DoNotBuildZuo"
fi
if [ ! -f "$srcdir"/nanopass/nanopass.ss ] ; then
submod_instructions 'Source in "nanopass" is missing'
fi
-if [ "${zlibDep}" != "" ] ; then
+if [ "${zlibLib}" = "" ] ; then
if [ ! -f "$srcdir"/zlib/configure ] ; then
submod_instructions 'Source in "zlib" is missing'
fi
fi
-if [ "${LZ4Dep}" != "" ] ; then
+if [ "${LZ4Lib}" = "" ] ; then
if [ ! -f "$srcdir"/lz4/lib/Makefile ] ; then
submod_instructions 'Source in "lz4" is missing'
fi
fi
-if [ ! -f "$srcdir"/stex/Mf-stex ] ; then
- submod_instructions 'Source in "stex" is missing'
+if [ "${STEXLIB}" = "" ] ; then
+ if [ ! -f "$srcdir"/stex/Mf-stex ] ; then
+ submod_instructions 'Source in "stex" is missing'
+ fi
fi
# more compile and link flags for c/Mf-unix and mats/Mf-unix
@@ -1083,7 +1104,7 @@ cp "$srcdir"/makefiles/buildmain.zuo main.zuo
# Some idea, but in the workarea, so it refers to "workarea.zuo" here:
cp "$srcdir"/makefiles/workmain.zuo $w/main.zuo
-# The content of "$w/Makefile" records configuration decisions,
+# The content of "$w/Mf-config" records configuration decisions,
# and the Zuo build script takes it from there
cat > $w/Mf-config << END
srcdir=$srcdir
@@ -1119,6 +1140,7 @@ cursesLib=$cursesLib
ncursesLib=$ncursesLib
zlibLib=$zlibLib
LZ4Lib=$LZ4Lib
+STEXLIB=$STEXLIB
warningFlags=$warningFlags
Kernel=$Kernel
installscriptname=$installscriptname
@@ -1130,6 +1152,10 @@ preloadBootFiles=$preloadBootFiles
alwaysUseBootFile=$alwaysUseBootFile
relativeBootFiles=$relativeBootFiles
+ZUO=$ZUO
+RM_ZUO=$RM_ZUO
+ZUO_TARGET=$ZUO_TARGET
+
InstallBin=$installbin
InstallLib=$installlib
InstallMan=$installman/man1
diff --git a/makefiles/Makefile.in b/makefiles/Makefile.in
index 3b95f065..0e3d307d 100644
--- a/makefiles/Makefile.in
+++ b/makefiles/Makefile.in
@@ -3,8 +3,6 @@ workarea=$(w)
include $(workarea)/Mf-config
-ZUO=bin/zuo
-
.PHONY: build
build: $(ZUO)
+ $(ZUO) $(workarea) MAKE="$(MAKE)"
@@ -144,9 +142,9 @@ pkg: $(ZUO)
.PHONY: clean
clean: $(ZUO)
+ $(ZUO) $(workarea) clean MAKE="$(MAKE)"
- rm -f bin/zuo
+ $(RM_ZUO)
# Using `+` here means that $(ZUO) gets built even if `-n`/`--dry-run` is provided to `make`
-$(ZUO): $(srcdir)/zuo/zuo.c
+$(ZUO_TARGET): $(srcdir)/zuo/zuo.c
+ mkdir -p bin
+ $(CC_FOR_BUILD) -DZUO_LIB_PATH='"'"../zuo/lib"'"' -o $(ZUO) $(srcdir)/zuo/zuo.c