diff --git a/Makefile b/Makefile index 05e3e792..4e8fec1b 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,18 @@ # install configuration CC ?= cc +CD ?= cd +RM ?= rm +LS ?= ls +INSTALL ?= install +MKDIR ?= $(INSTALL) -d +RMDIR ?= rmdir +TAR ?= tar +DIFF ?= diff +GREP ?= grep +FIND ?= find +SYMLINK ?= ln -s + PREFIX ?= /usr/local BINDIR ?= $(PREFIX)/bin LIBDIR ?= $(PREFIX)/lib @@ -122,18 +134,23 @@ all: chibi-scheme$(EXE) libs lib/chibi/ast$(SO) CHIBI ?= LD_LIBRARY_PATH=".:$(LD_LIBRARY_PATH)" ./chibi-scheme$(EXE) -COMPILED_LIBS := lib/srfi/18/threads$(SO) lib/srfi/27/rand$(SO) \ - lib/srfi/33/bit$(SO) lib/srfi/39/param$(SO) lib/srfi/69/hash$(SO) \ - lib/srfi/95/qsort$(SO) lib/srfi/98/env$(SO) lib/chibi/net$(SO) \ - lib/chibi/filesystem$(SO) lib/chibi/process$(SO) lib/chibi/time$(SO) \ - lib/chibi/system$(SO) lib/chibi/io/io$(SO) lib/chibi/stty$(SO) \ +CHIBI_COMPILED_LIBS := lib/chibi/filesystem$(SO) lib/chibi/process$(SO) \ + lib/chibi/time$(SO) lib/chibi/system$(SO) lib/chibi/stty$(SO) \ lib/chibi/weak$(SO) lib/chibi/heap-stats$(SO) lib/chibi/disasm$(SO) \ - lib/chibi/optimize/rest$(SO) lib/chibi/optimize/profile$(SO) \ + lib/chibi/net$(SO) +CHIBI_IO_COMPILED_LIBS := lib/chibi/io/io$(SO) +CHIBI_OPT_COMPILED_LIBS := lib/chibi/optimize/rest$(SO) \ + lib/chibi/optimize/profile$(SO) +COMPILED_LIBS := $(CHIBI_COMPILED_LIBS) $(CHIBI_IO_COMPILED_LIBS) \ + $(CHIBI_OPT_COMPILED_LIBS) lib/srfi/18/threads$(SO) \ + lib/srfi/27/rand$(SO) lib/srfi/33/bit$(SO) lib/srfi/39/param$(SO) \ + lib/srfi/69/hash$(SO) lib/srfi/95/qsort$(SO) lib/srfi/98/env$(SO) \ lib/scheme/time$(SO) libs: $(COMPILED_LIBS) -INCLUDES = include/chibi/sexp.h include/chibi/features.h include/chibi/install.h include/chibi/bignum.h +BASE_INCLUDES = include/chibi/sexp.h include/chibi/features.h include/chibi/install.h include/chibi/bignum.h +INCLUDES = $(BASE_INCLUDES) include/chibi/eval.h include/chibi/install.h: Makefile echo '#define sexp_so_extension "'$(SO)'"' > $@ @@ -142,16 +159,16 @@ include/chibi/install.h: Makefile echo '#define sexp_version "'`cat VERSION`'"' >> $@ echo '#define sexp_release_name "'`cat RELEASE`'"' >> $@ -sexp.o: sexp.c gc.c opt/bignum.c $(INCLUDES) Makefile +sexp.o: sexp.c gc.c opt/bignum.c $(BASE_INCLUDES) Makefile $(CC) -c $(XCPPFLAGS) $(XCFLAGS) $(CLIBFLAGS) -o $@ $< -sexp-ulimit.o: sexp.c gc.c opt/bignum.c $(INCLUDES) Makefile +sexp-ulimit.o: sexp.c gc.c opt/bignum.c $(BASE_INCLUDES) Makefile $(CC) -c $(XCPPFLAGS) $(XCFLAGS) $(CLIBFLAGS) -DSEXP_USE_LIMITED_MALLOC -o $@ $< -eval.o: eval.c opcodes.c vm.c opt/simplify.c $(INCLUDES) include/chibi/eval.h Makefile +eval.o: eval.c opcodes.c vm.c opt/simplify.c $(INCLUDES) Makefile $(CC) -c $(XCPPFLAGS) $(XCFLAGS) $(CLIBFLAGS) -o $@ $< -main.o: main.c $(INCLUDES) include/chibi/eval.h Makefile +main.o: main.c $(INCLUDES) Makefile $(CC) -c $(XCPPFLAGS) $(XCFLAGS) -o $@ $< libchibi-sexp$(SO): sexp.o @@ -175,6 +192,8 @@ clibs.c: $(GENSTATIC) lib lib/chibi lib/srfi chibi-scheme$(EXE) libs %.c: %.stub $(GENSTUBS) chibi-scheme$(EXE) -$(CHIBI) $(GENSTUBS) $< +# A special case, this needs to be linked with the LDFLAGS in case +# we're using Boehm. lib/chibi/ast$(SO): lib/chibi/ast.c $(INCLUDES) -$(CC) $(CLIBFLAGS) $(XCPPFLAGS) $(XCFLAGS) -o $@ $< $(XLDFLAGS) -L. -lchibi-scheme @@ -194,19 +213,19 @@ MODULE_DOCS := ast disasm equiv filesystem generic heap-stats io loop \ doc: doc/chibi.html $(MODULE_DOCS:%=doc/lib/chibi/%.html) clean: - rm -f *.o *.i *.s *.8 - rm -f tests/basic/*.out tests/basic/*.err + $(RM) -f *.o *.i *.s *.8 + $(RM) -f tests/basic/*.out tests/basic/*.err cleaner: clean - rm -f chibi-scheme$(EXE) chibi-scheme-static$(EXE) libchibi-scheme$(SO) *.a include/chibi/install.h - find lib -name \*$(SO) -exec rm -rf '{}' \; + $(RM) -f chibi-scheme$(EXE) chibi-scheme-static$(EXE) chibi-scheme-ulimit$(EXE) libchibi-scheme$(SO) *.a include/chibi/install.h + $(FIND) lib -name \*$(SO) -exec $(RM) -rf '{}' \; dist-clean: cleaner - for f in `find lib -name \*.stub`; do rm -f $${f%.stub}.c; done + for f in `find lib -name \*.stub`; do $(RM) -f $${f%.stub}.c; done checkdefs: @for d in $(D); do \ - if ! grep -q " SEXP_USE_$${d%%=*} " include/chibi/features.h; then \ + if ! $(GREP) -q " SEXP_USE_$${d%%=*} " include/chibi/features.h; then \ echo "WARNING: unknown definition $$d"; \ fi; \ done @@ -214,7 +233,7 @@ checkdefs: test-basic: chibi-scheme$(EXE) @for f in tests/basic/*.scm; do \ $(CHIBI) $$f >$${f%.scm}.out 2>$${f%.scm}.err; \ - if diff -q $(DIFFOPTS) $${f%.scm}.out $${f%.scm}.res; then \ + if $(DIFF) -q $(DIFFOPTS) $${f%.scm}.out $${f%.scm}.res; then \ echo "[PASS] $${f%.scm}"; \ else \ echo "[FAIL] $${f%.scm}"; \ @@ -264,44 +283,78 @@ test: chibi-scheme$(EXE) $(CHIBI) tests/r5rs-tests.scm install: all - mkdir -p $(DESTDIR)$(BINDIR) - cp chibi-scheme$(EXE) $(DESTDIR)$(BINDIR)/ - cp tools/chibi-ffi $(DESTDIR)$(BINDIR)/ - cp tools/chibi-doc $(DESTDIR)$(BINDIR)/ - mkdir -p $(DESTDIR)$(MODDIR)/chibi - mkdir -p $(DESTDIR)$(MODDIR)/scheme - mkdir -p $(DESTDIR)$(MODDIR)/srfi - cp -r lib/* $(DESTDIR)$(MODDIR)/ - mkdir -p $(DESTDIR)$(INCDIR) - cp $(INCLUDES) include/chibi/eval.h $(DESTDIR)$(INCDIR)/ - mkdir -p $(DESTDIR)$(LIBDIR) - mkdir -p $(DESTDIR)$(SOLIBDIR) - cp libchibi-scheme$(SO) $(DESTDIR)$(SOLIBDIR)/ - cp libchibi-scheme$(SO) $(DESTDIR)$(SOLIBDIR)/ - -cp libchibi-scheme.a $(DESTDIR)$(LIBDIR)/ - mkdir -p $(DESTDIR)$(MANDIR) - cp doc/chibi-scheme.1 $(DESTDIR)$(MANDIR)/ + $(MKDIR) $(DESTDIR)$(BINDIR) + $(INSTALL) chibi-scheme$(EXE) $(DESTDIR)$(BINDIR)/ + $(INSTALL) tools/chibi-ffi $(DESTDIR)$(BINDIR)/ + $(INSTALL) tools/chibi-doc $(DESTDIR)$(BINDIR)/ + $(MKDIR) $(DESTDIR)$(MODDIR)/chibi/io $(DESTDIR)$(MODDIR)/chibi/loop $(DESTDIR)$(MODDIR)/chibi/match $(DESTDIR)$(MODDIR)/chibi/net $(DESTDIR)$(MODDIR)/chibi/optimize $(DESTDIR)$(MODDIR)/chibi/term + $(MKDIR) $(DESTDIR)$(MODDIR)/scheme/char + $(MKDIR) $(DESTDIR)$(MODDIR)/srfi/1 $(DESTDIR)$(MODDIR)/srfi/18 $(DESTDIR)$(MODDIR)/srfi/27 $(DESTDIR)$(MODDIR)/srfi/33 $(DESTDIR)$(MODDIR)/srfi/39 $(DESTDIR)$(MODDIR)/srfi/69 $(DESTDIR)$(MODDIR)/srfi/95 $(DESTDIR)$(MODDIR)/srfi/99 $(DESTDIR)$(MODDIR)/srfi/99/records + $(INSTALL) lib/*.sld lib/*.scm $(DESTDIR)$(MODDIR)/ + $(INSTALL) lib/chibi/*.sld lib/chibi/*.scm $(DESTDIR)$(MODDIR)/chibi/ + $(INSTALL) lib/chibi/io/*.scm $(DESTDIR)$(MODDIR)/chibi/io/ + $(INSTALL) lib/chibi/loop/*.scm $(DESTDIR)$(MODDIR)/chibi/loop/ + $(INSTALL) lib/chibi/match/*.scm $(DESTDIR)$(MODDIR)/chibi/match/ + $(INSTALL) lib/chibi/net/*.sld lib/chibi/net/*.scm $(DESTDIR)$(MODDIR)/chibi/net/ + $(INSTALL) lib/chibi/optimize/*.sld lib/chibi/optimize/*.scm $(DESTDIR)$(MODDIR)/chibi/optimize/ + $(INSTALL) lib/chibi/term/*.sld lib/chibi/term/*.scm $(DESTDIR)$(MODDIR)/chibi/term/ + $(INSTALL) lib/scheme/*.sld lib/scheme/*.scm $(DESTDIR)$(MODDIR)/scheme/ + $(INSTALL) lib/scheme/char/*.sld $(DESTDIR)$(MODDIR)/scheme/char/ + $(INSTALL) lib/srfi/*.sld lib/srfi/*.scm $(DESTDIR)$(MODDIR)/srfi/ + $(INSTALL) lib/srfi/1/*.scm $(DESTDIR)$(MODDIR)/srfi/1/ + $(INSTALL) lib/srfi/18/*.scm $(DESTDIR)$(MODDIR)/srfi/18/ + $(INSTALL) lib/srfi/27/*.scm $(DESTDIR)$(MODDIR)/srfi/27/ + $(INSTALL) lib/srfi/33/*.scm $(DESTDIR)$(MODDIR)/srfi/33/ + $(INSTALL) lib/srfi/39/*.scm $(DESTDIR)$(MODDIR)/srfi/39/ + $(INSTALL) lib/srfi/69/*.scm $(DESTDIR)$(MODDIR)/srfi/69/ + $(INSTALL) lib/srfi/95/*.scm $(DESTDIR)$(MODDIR)/srfi/95/ + $(INSTALL) lib/srfi/99/*.sld $(DESTDIR)$(MODDIR)/srfi/99/ + $(INSTALL) lib/srfi/99/records/*.sld lib/srfi/99/records/*.scm $(DESTDIR)$(MODDIR)/srfi/99/records/ + $(MKDIR) $(DESTDIR)$(BINMODDIR)/chibi/io/ + $(MKDIR) $(DESTDIR)$(BINMODDIR)/chibi/optimize/ + $(MKDIR) $(DESTDIR)$(BINMODDIR)/scheme/ + $(MKDIR) $(DESTDIR)$(BINMODDIR)/srfi/18 $(DESTDIR)$(BINMODDIR)/srfi/27 $(DESTDIR)$(BINMODDIR)/srfi/33 $(DESTDIR)$(BINMODDIR)/srfi/39 $(DESTDIR)$(BINMODDIR)/srfi/69 $(DESTDIR)$(BINMODDIR)/srfi/95 $(DESTDIR)$(BINMODDIR)/srfi/98 + $(INSTALL) $(CHIBI_COMPILED_LIBS) lib/chibi/ast$(SO) $(DESTDIR)$(BINMODDIR)/chibi/ + $(INSTALL) $(CHIBI_IO_COMPILED_LIBS) $(DESTDIR)$(BINMODDIR)/chibi/io/ + $(INSTALL) $(CHIBI_OPT_COMPILED_LIBS) $(DESTDIR)$(BINMODDIR)/chibi/optimize/ + $(INSTALL) lib/scheme/time$(SO) $(DESTDIR)$(BINMODDIR)/scheme/ + $(INSTALL) lib/srfi/18/threads$(SO) $(DESTDIR)$(BINMODDIR)/srfi/18 + $(INSTALL) lib/srfi/27/rand$(SO) $(DESTDIR)$(BINMODDIR)/srfi/27 + $(INSTALL) lib/srfi/33/bit$(SO) $(DESTDIR)$(BINMODDIR)/srfi/33 + $(INSTALL) lib/srfi/39/param$(SO) $(DESTDIR)$(BINMODDIR)/srfi/39 + $(INSTALL) lib/srfi/69/hash$(SO) $(DESTDIR)$(BINMODDIR)/srfi/69 + $(INSTALL) lib/srfi/95/qsort$(SO) $(DESTDIR)$(BINMODDIR)/srfi/95 + $(INSTALL) lib/srfi/98/env$(SO) $(DESTDIR)$(BINMODDIR)/srfi/98 + $(MKDIR) $(DESTDIR)$(INCDIR) + $(INSTALL) $(INCLUDES) $(DESTDIR)$(INCDIR)/ + $(MKDIR) $(DESTDIR)$(LIBDIR) + $(MKDIR) $(DESTDIR)$(SOLIBDIR) + $(INSTALL) libchibi-scheme$(SO) $(DESTDIR)$(SOLIBDIR)/ + -$(INSTALL) libchibi-scheme.a $(DESTDIR)$(SOLIBDIR)/ + $(MKDIR) $(DESTDIR)$(MANDIR) + $(INSTALL) doc/chibi-scheme.1 $(DESTDIR)$(MANDIR)/ -if type ldconfig >/dev/null 2>/dev/null; then ldconfig; fi uninstall: - rm -f $(DESTDIR)$(BINDIR)/chibi-scheme$(EXE) - rm -f $(DESTDIR)$(BINDIR)/chibi-scheme-static$(EXE) - rm -f $(DESTDIR)$(SOLIBDIR)/libchibi-scheme$(SO) - rm -f $(DESTDIR)$(LIBDIR)/libchibi-scheme$(SO).a - cd $(DESTDIR)$(INCDIR) && rm -f $(INCLUDES) include/chibi/eval.h - rm -rf $(DESTDIR)$(MODDIR) - rm -rf $(DESTDIR)$(BINMODDIR) + $(RM) -f $(DESTDIR)$(BINDIR)/chibi-scheme$(EXE) + $(RM) -f $(DESTDIR)$(BINDIR)/chibi-scheme-static$(EXE) + $(RM) -f $(DESTDIR)$(SOLIBDIR)/libchibi-scheme$(SO) + $(RM) -f $(DESTDIR)$(LIBDIR)/libchibi-scheme$(SO).a + $(CD) $(DESTDIR)$(INCDIR) && rm -f $(INCLUDES) + $(RM) -f $(DESTDIR)$(MODDIR)/*.{sld,scm} $(DESTDIR)$(MODDIR)/*/*.{sld,scm} $(DESTDIR)$(MODDIR)/*/*/*.{sld,scm} + $(CD) $(DESTDIR)$(BINMODDIR) && $(RM) -f $(COMPILED_LIBS:lib/%=%) chibi/ast$(SO) + -if [ -d $(DESTDIR)$(BINMODDIR) ] && ! $(LS) -A $(DESTDIR)$(BINMODDIR) | $(GREP) -q -E .; then $(RMDIR) -f $(DESTDIR)$(BINMODDIR); fi dist: dist-clean - rm -f chibi-scheme-`cat VERSION`.tgz - mkdir chibi-scheme-`cat VERSION` - for f in `hg manifest`; do mkdir -p chibi-scheme-`cat VERSION`/`dirname $$f`; ln -s `pwd`/$$f chibi-scheme-`cat VERSION`/$$f; done - tar cphzvf chibi-scheme-`cat VERSION`.tgz chibi-scheme-`cat VERSION` - rm -rf chibi-scheme-`cat VERSION` + $(RM) -f chibi-scheme-`cat VERSION`.tgz + $(MKDIR) chibi-scheme-`cat VERSION` + @for f in `hg manifest`; do $(MKDIR) chibi-scheme-`cat VERSION`/`dirname $$f`; $(SYMLINK) `pwd`/$$f chibi-scheme-`cat VERSION`/$$f; done + $(TAR) cphzvf chibi-scheme-`cat VERSION`.tgz chibi-scheme-`cat VERSION` + $(RM) -rf chibi-scheme-`cat VERSION` mips-dist: dist-clean - rm -f chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'`.tgz - mkdir chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'` - for f in `hg manifest`; do mkdir -p chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'`/`dirname $$f`; ln -s `pwd`/$$f chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'`/$$f; done - tar cphzvf chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'`.tgz chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'` - rm -rf chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'` + $(RM) -f chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'`.tgz + $(MKDIR) chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'` + @for f in `hg manifest`; do $(MKDIR) chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'`/`dirname $$f`; $(SYMLINK) `pwd`/$$f chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'`/$$f; done + $(TAR) cphzvf chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'`.tgz chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'` + $(RM) -rf chibi-scheme-`date +%Y%m%d`-`hg tags|head -1|sed -n 's/.* \([0-9]*\):.*/\1/p'`