191 lines
6.9 KiB
Text
191 lines
6.9 KiB
Text
# This is "inweb.mkscript", a script used to generate the makefile "inweb.mk"
|
|
# used to build the tool "inweb". Do not edit "inweb.mk" directly. Instead,
|
|
# edit this script, and then rebuild "inweb.mk" with the command:
|
|
|
|
# inweb/Tangled/inweb inweb -prototype inweb/scripts/inweb.mkscript -makefile inweb/inweb.mk
|
|
|
|
# See the inweb manual for documentation on the *.mkscript file format, i.e.,
|
|
# the format in which this file is written. But it is essentially just a makefile
|
|
# with a number of special macro and loop features whose syntax involves braces
|
|
# { ... }, so anywhere that you see braces, you're looking at something special
|
|
# to *.mkscript; anything else is straightforward make syntax.
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Note that the resulting makescript expects to be used from a current working
|
|
# directory which is the _one above_ "inweb", _not_ from "inweb" itself. So it
|
|
# should usually be invoked as e.g. "make -f inweb/inweb.mk".
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Variants of this file exist for each of the following supported platforms,
|
|
# generated from inweb.mkscript and Materials/platforms/PLATFORM.mkscript in
|
|
# each case; when a platform is selected by the scripts/first.sh shell script,
|
|
# the relevant one is copied to become inweb/inweb.mk.
|
|
|
|
{set name: PLATFORMS value: macos, macos32, macosarm, macosuniv, windows, linux, unix}
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
{platform-settings}
|
|
|
|
ME = inweb
|
|
FTEST = $(ME)/foundation-test
|
|
SAFETYCOPY = $(ME)/Tangled/inweb_dev
|
|
|
|
# The colony file for this collection of webs contains information about their
|
|
# paths, where they are woven to, and so on
|
|
|
|
COLONY = $(ME)/colony.txt
|
|
|
|
-include $(ME)/platform-settings.mk
|
|
|
|
# Making the program:
|
|
|
|
.PHONY: all
|
|
|
|
all: $(ME)/platform-settings.mk $(ME)/Tangled/$(ME) $(FTEST)/Tangled/foundation-test
|
|
|
|
$(ME)/Tangled/$(ME): $(ME)/Contents.w $(ME)/Chapter*/*.w $(ME)/foundation-module/Contents.w $(ME)/foundation-module/Chapter*/*.w
|
|
$(call make-me)
|
|
|
|
$(FTEST)/Tangled/foundation-test: $(FTEST)/Contents.w $(FTEST)/Sections/*.w $(ME)/foundation-module/Contents.w $(ME)/foundation-module/Chapter*/*.w
|
|
$(call make-ftest)
|
|
|
|
.PHONY: force
|
|
force: $(ME)/platform-settings.mk
|
|
$(call make-me)
|
|
$(call make-ftest)
|
|
|
|
{define: make-settings platform: PLATFORM}
|
|
$(INWEB) -prototype $(ME)/Materials/platforms/{PLATFORM}.mkscript -makefile $(ME)/Materials/platforms/{PLATFORM}.mk
|
|
$(INWEB) -platform {PLATFORM} -prototype $(ME)/scripts/inweb.mkscript -makefile $(ME)/Materials/platforms/inweb-on-{PLATFORM}.mk
|
|
{end-define}
|
|
|
|
.PHONY: makers
|
|
makers:
|
|
$(INWEB) $(FTEST) -makefile $(FTEST)/foundation-test.mk
|
|
{repeat with: PLATFORM in: {PLATFORMS}}
|
|
{make-settings platform: {PLATFORM}}
|
|
{end-repeat}
|
|
|
|
.PHONY: initial
|
|
initial: $(ME)/platform-settings.mk
|
|
$(call make-me-once-tangled)
|
|
$(call make-ftest)
|
|
|
|
.PHONY: safe
|
|
safe:
|
|
$(call make-me-using-safety-copy)
|
|
|
|
# One of inweb's tasks is to tangle webs: but since inweb is itself a web,
|
|
# that means it can only be compiled using itself. To avoid a logical
|
|
# impossibility, a ready-tangled inweb.c is supplied as part of the Core
|
|
# Inform tarball. The following builds inweb from this:
|
|
|
|
define make-me-once-tangled
|
|
{compile from: $(ME)/Tangled/$(ME).c to: $(ME)/Tangled/$(ME).o}
|
|
{link from: $(ME)/Tangled/$(ME).o to: $(ME)/Tangled/$(ME)$(EXEEXTENSION)}
|
|
endef
|
|
|
|
# If inweb exists already, we can compile it using itself like so:
|
|
|
|
define make-me
|
|
$(ME)/Tangled/$(ME) $(ME) -tangle
|
|
$(call make-me-once-tangled)
|
|
endef
|
|
|
|
# When developing inweb, it's all too easy to break it and therefore to get
|
|
# into a cleft stick: inweb has a bug, so it can't tangle inweb any more, and
|
|
# therefore the bug can't be fixed. To get around this, we maintain a spare
|
|
# copy of the inweb executable which is known to work. "make inwebdev" uses
|
|
# the safety copy of inweb to recompile inweb.
|
|
|
|
define make-me-using-safety-copy
|
|
$(SAFETYCOPY) $(ME) -tangle
|
|
$(call make-me-once-tangled)
|
|
endef
|
|
|
|
# Now foundation-test...
|
|
|
|
define make-ftest
|
|
$(INWEB) $(FTEST) -makefile $(FTEST)/foundation-test.mk
|
|
make -f $(FTEST)/foundation-test.mk force
|
|
endef
|
|
|
|
# Testing the program - which requires intest to be installed too.
|
|
|
|
.PHONY: test
|
|
test:
|
|
$(INTEST) -from $(ME) all
|
|
|
|
# "make commit" should be used only by the Benevolent Overlord of Inweb.
|
|
# It updates the build code and commits to the repository.
|
|
|
|
.PHONY: commit
|
|
commit:
|
|
$(INWEB) -advance-build-file $(ME)/build.txt
|
|
$(INWEB) -prototype inweb/scripts/inweb.rmscript -write-me inweb/README.md
|
|
cd $(ME); git commit -a
|
|
|
|
# Weaving the web for GitHub Pages:
|
|
|
|
.PHONY: pages
|
|
pages:
|
|
$(INWEB) -help > $(ME)/Figures/help.txt
|
|
$(INWEB) -show-languages > $(ME)/Figures/languages.txt
|
|
$(INWEB) -colony $(COLONY) -member twinprimes -scan > $(ME)/Figures/scan.txt
|
|
$(INWEB) -colony $(COLONY) -member twinprimes -weave-as TestingInweb -weave-to $(ME)/Figures/tree.txt
|
|
cp -f $(COLONY) $(ME)/Figures/colony.txt
|
|
cp -f $(ME)/docs-src/nav.html $(ME)/Figures/nav.txt
|
|
$(INWEB) -advance-build-file $(ME)/build.txt
|
|
mkdir -p $(ME)/docs
|
|
rm -f $(ME)/docs/*.html
|
|
mkdir -p $(ME)/docs/docs-assets
|
|
rm -f $(ME)/docs/docs-assets/*.css
|
|
rm -f $(ME)/docs/docs-assets/*.png
|
|
rm -f $(ME)/docs/docs-assets/*.gif
|
|
cp -f $(ME)/docs-src/Octagram.png $(ME)/docs/docs-assets/Octagram.png
|
|
$(INWEB) -prototype inweb/scripts/inweb.rmscript -write-me inweb/README.md
|
|
mkdir -p $(ME)/docs/inweb
|
|
rm -f $(ME)/docs/inweb/*.html
|
|
mkdir -p $(ME)/docs/goldbach
|
|
rm -f $(ME)/docs/goldbach/*.html
|
|
mkdir -p $(ME)/docs/twinprimes
|
|
rm -f $(ME)/docs/twinprimes/*.html
|
|
mkdir -p $(ME)/docs/eastertide
|
|
rm -f $(ME)/docs/eastertide/*.html
|
|
mkdir -p $(ME)/docs/foundation-module
|
|
rm -f $(ME)/docs/foundation-module/*.html
|
|
mkdir -p $(ME)/docs/foundation-test
|
|
rm -f $(ME)/docs/foundation-test/*.html
|
|
$(INWEB) -colony $(COLONY) -member overview -weave
|
|
$(INWEB) -colony $(COLONY) -member goldbach -weave
|
|
$(INWEB) -colony $(COLONY) inweb/Examples/goldbach all -weave-as Plain -weave-to inweb/docs/goldbach/goldbach.txt
|
|
$(INWEB) -colony $(COLONY) inweb/Examples/goldbach all -weave-as TestingInweb -weave-to inweb/docs/goldbach/goldbach-test.txt
|
|
$(INWEB) -colony $(COLONY) inweb/Examples/goldbach all -weave-as PDFTeX -weave-to inweb/docs/goldbach/goldbach.pdf
|
|
$(INWEB) -colony $(COLONY) inweb/Examples/goldbach all -weave-as TeX -weave-to inweb/docs/goldbach/goldbach.tex
|
|
$(INWEB) -colony $(COLONY) -member twinprimes -weave
|
|
$(INWEB) -colony $(COLONY) -member eastertide -weave
|
|
$(INWEB) -colony $(COLONY) -member inweb -weave
|
|
$(INWEB) -colony $(COLONY) -member foundation -weave
|
|
$(INWEB) -colony $(COLONY) -member foundation-test -weave
|
|
|
|
# Cleaning up:
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
$(call clean-up)
|
|
|
|
.PHONY: purge
|
|
purge:
|
|
$(call clean-up)
|
|
|
|
# Note that the tangled inweb.c is not cleaned up: it's needed to bootstrap
|
|
# the use of inweb from a fresh installation where there's no executable
|
|
# inweb yet with which to tangle inweb.c (see below).
|
|
|
|
define clean-up
|
|
rm -f $(ME)/Tangled/*.o
|
|
rm -f $(ME)/Tangled/*.h
|
|
endef
|