Makefile improvements

Using a tmp file prevents a failed build from being reported
as succeeded.

Changes in the compiler should now rebuild the tests
automatically.
This commit is contained in:
Johan B.W. de Vries 2025-02-09 14:59:09 +01:00
parent a08084230e
commit 7568a15093
6 changed files with 38 additions and 11 deletions

View File

@ -2,3 +2,4 @@
/lang0py*.exe /lang0py*.exe
/lang0py*.o /lang0py*.o
/lang0py*.py /lang0py*.py
/lang0py*.py.tmp

View File

@ -18,18 +18,22 @@ all: lang0py.exe
$(CYTHON) -3 --embed $< $(CYTHON) -3 --embed $<
lang0py0.py: lang0py.lang0 $(LANG0PY) lang0py0.py: lang0py.lang0 $(LANG0PY)
cat $< | $(LANG0PY) > $@ cat $< | $(LANG0PY) > $@.tmp
mv $@.tmp $@
lang0py1.py: lang0py.lang0 lang0py0.exe lang0py1.py: lang0py.lang0 lang0py0.exe
cat $< | ./lang0py0.exe > $@ cat $< | ./lang0py0.exe > $@.tmp
mv $@.tmp $@
# Cannot diff on the first iteration - platform change # Cannot diff on the first iteration - platform change
lang0py2.py: lang0py.lang0 lang0py1.exe lang0py2.py: lang0py.lang0 lang0py1.exe
cat $< | ./lang0py1.exe > $@ cat $< | ./lang0py1.exe > $@.tmp
mv $@.tmp $@
-diff lang0py1.py lang0py2.py -diff lang0py1.py lang0py2.py
lang0py.py: lang0py.lang0 lang0py2.exe lang0py.py: lang0py.lang0 lang0py2.exe
cat $< | ./lang0py2.exe > $@ cat $< | ./lang0py2.exe > $@.tmp
mv $@.tmp $@
-diff lang0py2.py lang0py.py -diff lang0py2.py lang0py.py
clean: clean:

1
2-lang0c/.gitignore vendored
View File

@ -1,4 +1,5 @@
/lang0c*.c /lang0c*.c
/lang0c*.c.tmp
/lang0c*.exe /lang0c*.exe
/lang0c*.o /lang0c*.o
/lang0c*.py /lang0c*.py

View File

@ -15,7 +15,8 @@ all: lang0c.exe
gcc -c $< gcc -c $<
lang0c0.py: lang0c.lang0 $(LANG0PY) lang0c0.py: lang0c.lang0 $(LANG0PY)
cat $< | $(LANG0PY) > $@ cat $< | $(LANG0PY) > $@.tmp
mv $@.tmp $@
lang0c0.c: lang0c0.py lang0c0.c: lang0c0.py
$(CYTHON) -3 --embed $< $(CYTHON) -3 --embed $<
@ -27,15 +28,18 @@ lang0c0.exe: lang0c0.o
gcc -o $@ $< -lpython$(PYVERSION) gcc -o $@ $< -lpython$(PYVERSION)
lang0c1.c: lang0c.lang0 lang0c0.exe lang0c1.c: lang0c.lang0 lang0c0.exe
cat $< | ./lang0c0.exe > $@ cat $< | ./lang0c0.exe > $@.tmp
mv $@.tmp $@
# Cannot diff on the first iteration - platform change # Cannot diff on the first iteration - platform change
lang0c2.c: lang0c.lang0 lang0c1.exe lang0c2.c: lang0c.lang0 lang0c1.exe
cat $< | ./lang0c1.exe > $@ cat $< | ./lang0c1.exe > $@.tmp
mv $@.tmp $@
-diff lang0c1.c lang0c2.c -diff lang0c1.c lang0c2.c
lang0c.c: lang0c.lang0 lang0c2.exe lang0c.c: lang0c.lang0 lang0c2.exe
cat $< | ./lang0c2.exe > $@ cat $< | ./lang0c2.exe > $@.tmp
mv $@.tmp $@
-diff lang0c2.c lang0c.c -diff lang0c2.c lang0c.c
clean: clean:

View File

@ -1,5 +1,7 @@
.SUFFIXES: .SUFFIXES:
.PHONY: all clean .PHONY: all clean
.PRECIOUS: build/%.it0.py build/%.it0.c
.DELETE_ON_ERROR:
PYVERSION=3.10 PYVERSION=3.10
PYPREFIX=/usr PYPREFIX=/usr
@ -31,8 +33,12 @@ clean:
### ###
# it0 # it0
../0-lang0py/lang0py.exe: ../0-lang0py/lang0py.py
$(MAKE) -C ../0-lang0py
build/%.it0.py: %.lang0 ../0-lang0py/lang0py.exe build/%.it0.py: %.lang0 ../0-lang0py/lang0py.exe
cat $< | ../0-lang0py/lang0py.exe > $@ cat $< | ../0-lang0py/lang0py.exe > $@.tmp
mv $@.tmp $@
build/%.it0.c: build/%.it0.py build/%.it0.c: build/%.it0.py
$(CYTHON) -3 --embed -o $@ $^ $(CYTHON) -3 --embed -o $@ $^
@ -46,8 +52,12 @@ build/%.it0: build/%.it0.o
### ###
# it1 # it1
../1-lang0py/lang0py.exe: ../0-lang0py/lang0py.exe ../1-lang0py/lang0py.lang0
$(MAKE) -C ../1-lang0py
build/%.it1.py: %.lang0 ../1-lang0py/lang0py.exe build/%.it1.py: %.lang0 ../1-lang0py/lang0py.exe
cat $< | ../1-lang0py/lang0py.exe > $@ cat $< | ../1-lang0py/lang0py.exe > $@.tmp
mv $@.tmp $@
build/%.it1.c: build/%.it1.py build/%.it1.c: build/%.it1.py
$(CYTHON) -3 --embed -o $@ $^ $(CYTHON) -3 --embed -o $@ $^
@ -61,8 +71,12 @@ build/%.it1: build/%.it1.o
### ###
# it2 # it2
../2-lang0c/lang0c.exe: ../0-lang0py/lang0py.exe ../1-lang0py/lang0py.exe ../2-lang0c/lang0c.lang0
$(MAKE) -C ../2-lang0c
build/%.it2.c: %.lang0 ../2-lang0c/lang0c.exe build/%.it2.c: %.lang0 ../2-lang0c/lang0c.exe
cat $< | ../2-lang0c/lang0c.exe > $@ cat $< | ../2-lang0c/lang0c.exe > $@.tmp
mv $@.tmp $@
build/%.it2.o: build/%.it2.c build/%.it2.o: build/%.it2.c
$(CC) -o $@ -c $^ -I$(PYPREFIX)/include/python$(PYVERSION) $(CC) -o $@ -c $^ -I$(PYPREFIX)/include/python$(PYVERSION)

View File

@ -2,10 +2,13 @@
/*.it0.c /*.it0.c
/*.it0.o /*.it0.o
/*.it0.py /*.it0.py
/*.it0.py.tmp
/*.it1 /*.it1
/*.it1.c /*.it1.c
/*.it1.o /*.it1.o
/*.it1.py /*.it1.py
/*.it1.py.tmp
/*.it2 /*.it2
/*.it2.c /*.it2.c
/*.it2.c.tmp
/*.it2.o /*.it2.o