diff --git a/BUILDING b/BUILDING index 7b3dc9c88..9e9a268be 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=`. 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=`). WINDOWS VIA COMMAND PROMPT diff --git a/build.zuo b/build.zuo index c21d2caa9..c5896396f 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 2b4b594ed..782dd09b7 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= executable stripper" echo " ZLIB= link to instead of own zlib" echo " LZ4= link to instead of own LZ4" + echo " STEXLIB= build docs with instead of own stex" + echo " ZUO= build with 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 3b95f0656..0e3d307d3 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