2019-02-04 22:26:45 +00:00
|
|
|
# This is a makefile for "inweb". It expects the current working folder to be
|
|
|
|
# the one above the one holding this file (unusually), so it's best called
|
|
|
|
# with e.g. "make -f inweb/make-inweb.mk".
|
|
|
|
|
|
|
|
ME = inweb
|
|
|
|
SAFETYCOPY = $(ME)/Tangled/inweb_dev
|
|
|
|
|
|
|
|
-include $(ME)/platform-settings.mk
|
|
|
|
|
|
|
|
# Making the program:
|
|
|
|
|
|
|
|
.PHONY: all
|
|
|
|
|
|
|
|
all: $(ME)/platform-settings.mk $(ME)/Tangled/$(ME) $(ME)/Manual.html
|
|
|
|
|
|
|
|
$(ME)/Tangled/$(ME): $(ME)/Contents.w $(ME)/Chapter*/*.w $(ME)/foundation-module/Contents.w $(ME)/foundation-module/Chapter*/*.w
|
|
|
|
$(call make-me)
|
|
|
|
|
|
|
|
$(ME)/Manual.html: $(ME)/Contents.w $(ME)/Preliminaries/*.w
|
|
|
|
$(ME)/Tangled/$(ME) $(ME) -weave P -weave-to $(ME)/Manual.html
|
|
|
|
|
|
|
|
.PHONY: force
|
|
|
|
force: $(ME)/platform-settings.mk
|
|
|
|
$(call make-me)
|
|
|
|
|
|
|
|
.PHONY: macos
|
|
|
|
macos:
|
|
|
|
cp -f $(ME)/Materials/macos-make-settings.mk $(ME)/platform-settings.mk
|
2019-02-10 23:08:53 +00:00
|
|
|
echo "=== Platform set to 64-bit MacOS. Now: make -f inweb/inweb.mk initial ==="
|
|
|
|
|
|
|
|
.PHONY: macos32
|
|
|
|
macos32:
|
|
|
|
cp -f $(ME)/Materials/macos32-make-settings.mk $(ME)/platform-settings.mk
|
|
|
|
echo "=== Platform set to 32-bit MacOS. Now: make -f inweb/inweb.mk initial ==="
|
2019-02-04 22:26:45 +00:00
|
|
|
|
|
|
|
.PHONY: windows
|
|
|
|
windows:
|
|
|
|
cp -f $(ME)/Materials/windows-make-settings.mk $(ME)/platform-settings.mk
|
2019-02-10 23:08:53 +00:00
|
|
|
echo "=== Platform set to Windows. Now: make -f inweb/inweb.mk initial ==="
|
2019-02-04 22:26:45 +00:00
|
|
|
|
|
|
|
.PHONY: linux
|
|
|
|
linux:
|
|
|
|
cp -f $(ME)/Materials/linux-make-settings.mk $(ME)/platform-settings.mk
|
2019-02-10 23:08:53 +00:00
|
|
|
echo "=== Platform set to Linux. Now: make -f inweb/inweb.mk initial ==="
|
2019-02-04 22:26:45 +00:00
|
|
|
|
|
|
|
.PHONY: unix
|
|
|
|
unix:
|
|
|
|
cp -f $(ME)/Materials/unix-make-settings.mk $(ME)/platform-settings.mk
|
2019-02-10 23:08:53 +00:00
|
|
|
echo "=== Platform set to generic Unix (non-Linux, non-MacOS, non-Android). Now: make -f inweb/inweb.mk initial ==="
|
2019-02-04 22:26:45 +00:00
|
|
|
|
|
|
|
.PHONY: android
|
|
|
|
android:
|
|
|
|
cp -f $(ME)/Materials/android-make-settings.mk $(ME)/platform-settings.mk
|
2019-02-10 23:08:53 +00:00
|
|
|
echo "=== Platform set to Android. Now: make -f inweb/inweb.mk initial ==="
|
2019-02-04 22:26:45 +00:00
|
|
|
|
|
|
|
.PHONY: initial
|
|
|
|
initial: $(ME)/platform-settings.mk
|
|
|
|
$(call make-me-once-tangled)
|
|
|
|
|
|
|
|
.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
|
|
|
|
$(CC) -o $(ME)/Tangled/$(ME).o $(ME)/Tangled/$(ME).c
|
|
|
|
$(LINK) -o $(ME)/Tangled/$(ME) $(ME)/Tangled/$(ME).o $(LINKEROPTS)
|
|
|
|
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
|
|
|
|
|
|
|
|
# Testing the program - which requires intest to be installed too.
|
|
|
|
|
|
|
|
.PHONY: test
|
|
|
|
test:
|
|
|
|
$(INTEST) -from $(ME) all
|
|
|
|
|
2019-02-10 23:08:53 +00:00
|
|
|
# Weaving the web for GitHub Pages:
|
|
|
|
|
|
|
|
.PHONY: pages
|
|
|
|
pages:
|
2019-03-12 23:32:12 +00:00
|
|
|
mkdir -p $(ME)/docs
|
|
|
|
inform/inpolicy/Tangled/inpolicy -write-me inweb/scripts/READMEscript.txt
|
2019-02-10 23:08:53 +00:00
|
|
|
mkdir -p $(ME)/docs/inweb
|
|
|
|
mkdir -p $(ME)/docs/foundation-module
|
|
|
|
mkdir -p $(ME)/docs/foundation-test
|
|
|
|
$(INWEB) $(ME) -weave-docs -weave-into $(ME)/docs/inweb
|
|
|
|
$(INWEB) $(ME)/foundation-module -weave-docs -weave-into $(ME)/docs/foundation-module
|
|
|
|
$(INWEB) $(ME)/foundation-test -weave-docs -weave-into $(ME)/docs/foundation-test
|
|
|
|
|
2019-02-04 22:26:45 +00:00
|
|
|
# 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
|