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/configure b/configure index 7e0247b51..9c08fa19d 100755 --- a/configure +++ b/configure @@ -103,6 +103,7 @@ moreBootFiles= preloadBootFiles= alwaysUseBootFile= skipSubmoduleUpdate= +zuoExternal= CONFIG_UNAME=`uname` @@ -446,6 +447,9 @@ while [ $# != 0 ] ; do LZ4=*) LZ4Lib=`echo $1 | sed -e 's/^LZ4=//'` ;; + ZUO=*) + zuoExternal=`echo $1 | sed -e 's/^ZUO=//'` + ;; *) echo "option '$1' unrecognized or missing an argument; try $0 --help" exit 1 @@ -672,6 +676,7 @@ 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 " ZUO= build with instead of own Zuo" echo "" echo "Available machine types: $machs" echo "" @@ -889,8 +894,17 @@ 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 @@ -1130,6 +1144,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