.SUFFIXES: .o
LANGS =
+SOURCES =
TARGETS = $(patsubst %,%-fringe,$(LANGS))
CLEANFILES = $(TARGETS)
CLEANFILES += test.*
test:: all
- @win=0 lose=0; \
- for lang in $(LANGS); do \
- echo >&3 "*** $$lang"; \
- printf "Test $$lang..."; \
- if ./test ./$${lang}-fringe 2>&3; then \
- win=$$(expr $$win + 1); \
- printf " ok\n"; \
- else \
- lose=$$(expr $$lose + 1); \
- printf " FAILED\n"; \
- fi; \
- done 3>test.log; \
- if [ $$lose -eq 0 ]; then \
- echo "All $$win test(s) OK"; \
- else \
- echo "FAILED $$lose test(s)!"; \
- exit 1; \
+ @win=0 lose=0; \
+ for lang in $(LANGS); do \
+ echo >&3 "*** $$lang"; \
+ printf "Test $$lang..."; \
+ time=`command time -o/dev/stdout -f "%U user; %S system; %E" \
+ ./test ./$${lang}-fringe 2>&3`; \
+ if [ $$? -eq 0 ]; then \
+ win=$$(expr $$win + 1); \
+ printf " ok ($$time)\n"; \
+ else \
+ lose=$$(expr $$lose + 1); \
+ printf " FAILED\n"; \
+ fi; \
+ done 3>test.log; \
+ if [ $$lose -eq 0 ]; then \
+ echo "All $$win test(s) OK"; \
+ else \
+ echo "FAILED $$lose test(s)!"; \
+ exit 1; \
fi
###--------------------------------------------------------------------------
+### Reporting.
+
+report::
+ wc -l $(SOURCES) | sort -n
+
+###--------------------------------------------------------------------------
### C.
CC = gcc
.c.o:; $(CC) -c $(CFLAGS) -o $@ $<
LANGS += c
+SOURCES += c-fringe.c
c-fringe: c-fringe.o
$(CC) -o $@ $^
.hs.o:; $(HC) -c $(HFLAGS) -o $@ $<
LANGS += haskell
+SOURCES += haskell-fringe.hs
haskell-fringe: haskell-fringe.o
$(HC) -o $@ $^
IFLAGS = -u -fa
LANGS += icon
+SOURCES += icon-fringe.icn
icon-fringe: icon-fringe.icn
$(ICONT) -o $@ $^
###--------------------------------------------------------------------------
### Common Lisp.
+CLEANFILES += *.core
+
LANGS += cl
+SOURCES += cl-fringe.lisp
cl-fringe: cl-fringe.lisp
- cl-launch -R -o $@ -f `pwd`/$^
+## cl-launch -R -o $@ -f `pwd`/$^ -- slow to start
+ cl-launch -o $@ -f `pwd`/$^ +I -r launch -d $@.core
###--------------------------------------------------------------------------
### F#.
.fs.exe:; fsc -o $@ $<
LANGS += f\#
+SOURCES += f\#-fringe.fs
f\#-fringe: f\#-fringe.exe
chmod +x $<
cp $< $@
SCMC = csc
SCMFLAGS = -c -O2
-.SUFFIXES: .scm .o
+.SUFFIXES: .scm
.scm.o:; $(SCMC) $(SCMFLAGS) -o $@ $<
LANGS += scheme
+SOURCES += scheme-fringe.scm
scheme-fringe: scheme-fringe.o
$(SCMC) -o $@ $^
###--------------------------------------------------------------------------
+### Go.
+
+GOOBJ = 8
+GOC = $(GOOBJ)g
+GOLINK = $(GOOBJ)l
+CLEANFILES += *.$(GOOBJ)
+.SUFFIXES: .$(GOOBJ) .go
+.go.$(GOOBJ):; $(GOC) $(GOFLAGS) $<
+
+LANGS += go
+SOURCES += go-fringe.go
+go-fringe: go-fringe.$(GOOBJ)
+ $(GOLINK) -o $@ $^
+
+###--------------------------------------------------------------------------
### Smalltalk.
LANGS += smalltalk
TARGETS += smalltalk-fringe.im
+SOURCES += smalltalk-fringe.st
smalltalk-fringe.im: smalltalk-fringe.st
echo "ObjectMemory snapshot: '$@.new'" | gst $^ -
mv $@.new $@