Skip to content
Makefile.in 18 KiB
Newer Older
#
#  Makefile for MKCL
#
#  Copyright (c) 2010-2012, Jean-Claude Beaudoin.
#  Copyright by a number of previous anonymous authors
#            presumed to be the same as for the rest of MKCL.
#
#  MKCL is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Lesser General Public
#  License as published by the Free Software Foundation; either
#  version 3 of the License, or (at your option) any later version.
#
#  See file '../Copyright' for full details.
#
#
top_srcdir= @top_srcdir@
srcdir	= @srcdir@

# Programs used by "make":
#

@SET_MAKE@
CC	= @MKCL_CC@
LIBS	= @TCP_LIBS@ @LIBS@
LDFLAGS	= @LDFLAGS@
RM	= @RM@
LN_S	= @LN_S@
EXE	= @EXEEXT@

# ==================== Where To Install Things ====================

# The default location for installation.  Everything is placed in
# subdirectories of this directory.  The default values for many of
# the variables below are expressed in terms of this one, so you may
# not need to change them.  This defaults to /usr/local.
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@/
libdir=@libdir@/
includedir=@includedir@/
mkcldir=@mkcldir@/
localmkcldir=./lib/@PACKAGE_NAME@-@PACKAGE_VERSION@/

# Programs used by "make install":
#
SHELL = @SHELL@
INSTALL	= @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_LIBRARY = $(INSTALL_SCRIPT)
INSTALL_DATA = @INSTALL_DATA@
mkinstalldirs = $(SHELL) ./gc/mkinstalldirs

# Files

SUBDIRS = @SUBDIRS@
LIBRARIES = @LIBRARIES@
LSP_LIBRARIES = @LSP_LIBRARIES@
TARGETS = @TARGETS@

MKCL_HFILES = mkcl/config.h \
              mkcl/list.h \
              mkcl/external.h \
              mkcl/internal.h \
              mkcl/mkcl-fenv.h \
              mkcl/mkcl-gc.h \
              mkcl/mkcl-inl.h \
              mkcl/mkcl-math.h \
              mkcl/number.h \
              mkcl/object.h \
              mkcl/stacks.h


ASDF_FASLS = asdf.fasb ../contrib/asdf-bundle/asdf-bundle.fas

CONTRIB_FASLS = \
                bytecmp.fasb \
                defsystem.fasb \
                profile.fasb \
                rt.fasb \
                serve-event.fasb \
                sockets.fasb \
                walker.fasb \
                trivial-features.fasb \
                trivial-garbage.fasb \
                alexandria.fasb \
                babel.fasb \
                cffi.fasb \
                fiveam.fasb \
                bordeaux-threads.fasb

CONTRIB_STATIC_LIBS = $(CONTRIB_FASLS:%.fasb=lib%.a)

BUILTINS = asdf profile rt serve-event sockets

MKCL_STATIC_PARTS = @LIBPREFIX@mkcltop.@LIBEXT@ liblsp.a @LIBPREFIX@mkclmin.@LIBEXT@


all: bin/mkcl-config $(TARGETS) $(ASDF_FASLS) $(CONTRIB_FASLS) HELP.DOC
.PHONY:	all

Makefile: Makefile.in config.status
	./config.status

mkcl/config.h: mkcl/config.h.in
	./config.status
	touch mkcl/config.h


bin/mkcl-small$(EXE) liblsp.a $(LSP_LIBRARIES) ENCODINGS: compile.lsp lsp/config.lsp cmp/cmpdefs.lsp lsp/*.lsp clos/*.lsp cmp/*.lsp mkcl/mkcl-cmp.h mkcl/config.h BUILD-STAMP mkcl_min$(EXE) @LIBPREFIX@mkcltop.@LIBEXT@
	MKCL_LIBDIR=`pwd`/ ./mkcl_min$(EXE) compile
	for i in $(LSP_LIBRARIES) ; do \
	  if test -s $$i ; then \
	    case $$i in \
	      *.dll) $(INSTALL_LIBRARY) $$i ./bin/ ;; \
	      *) ;; \
	    esac \
	  fi \
	done


asdf.fasb libasdf.a: bin/mkcl-small$(EXE) build-asdf.lsp ../contrib/asdf/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf.lsp

bytecmp.fasb libbytecmp.a: bin/mkcl-small$(EXE) build-bytecmp.lsp ../contrib/bytecmp/bytecmp.lsp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-bytecmp.lsp

defsystem.fasb libdefsystem.a: bin/mkcl-small$(EXE) build-defsystem.lsp ../contrib/defsystem/defsystem.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-defsystem.lsp

profile.fasb libprofile.a: bin/mkcl-small$(EXE) build-profile.lsp ../contrib/profile/profile.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-profile.lsp

../contrib/sockets/package.lisp: ../contrib/sockets/sockets.lisp
	touch ../contrib/sockets/package.lisp

sockets.fasb libsockets.a: bin/mkcl-small$(EXE) build-sockets.lsp ../contrib/sockets/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-sockets.lsp

serve-event.fasb libserve-event.a: bin/mkcl-small$(EXE) build-serve-event.lsp ../contrib/serve-event/serve-event.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-serve-event.lsp

walker.fasb walker.a: bin/mkcl-small$(EXE) build-serve-event.lsp ../contrib/walker/walk.lsp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-walker.lsp


../contrib/asdf-bundle/asdf-bundle.fas: bin/mkcl-small$(EXE) build-asdf-bundle.lsp ../contrib/asdf-bundle/*.lisp
	if [ "$${LOCALAPPDATA}" ]; then (cd "$${LOCALAPPDATA}"; rm -rf ./common-lisp/cache/mkcl-*); elif [ "$${APPDATA}" ]; then (cd "$${APPDATA}"; rm -rf ./common-lisp/cache/mkcl-*); else rm -rf $$HOME/.cache/common-lisp/mkcl-*/$$(cd ..;pwd -P)/contrib/asdf-bundle; fi
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf-bundle.lsp

trivial-features.fasb libtrivial-features.a: bin/mkcl-small$(EXE) build-asdf-contrib.lsp ../contrib/trivial-features*/src/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf-contrib.lsp -- trivial-features ../contrib/trivial-features*/
	cp -p ../contrib/trivial-features*/trivial-features.fasb .
	cp -p ../contrib/trivial-features*/libtrivial-features.a .


trivial-garbage.fasb libtrivial-garbage.a: bin/mkcl-small$(EXE) build-asdf-contrib.lsp ../contrib/trivial-garbage*/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf-contrib.lsp -- trivial-garbage ../contrib/trivial-garbage*/
	cp -p ../contrib/trivial-garbage*/trivial-garbage.fasb .
	cp -p ../contrib/trivial-garbage*/libtrivial-garbage.a .


alexandria.fasb libalexandria.a: bin/mkcl-small$(EXE) build-asdf-contrib.lsp ../contrib/alexandria*/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf-contrib.lsp -- alexandria ../contrib/alexandria*/
	cp -p ../contrib/alexandria*/alexandria.fasb .
	cp -p ../contrib/alexandria*/libalexandria.a .

babel.fasb libbabel.a: bin/mkcl-small$(EXE) build-asdf-contrib.lsp trivial-features.fasb alexandria.fasb ../contrib/babel*/src/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf-contrib.lsp -- babel ../contrib/babel*/
	cp -p ../contrib/babel*/babel.fasb .
	cp -p ../contrib/babel*/libbabel.a .

cffi.fasb libcffi.a: bin/mkcl-small$(EXE) build-asdf-contrib.lsp babel.fasb ../contrib/cffi*/src/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf-contrib.lsp -- cffi ../contrib/cffi*/
	cp -p ../contrib/cffi*/cffi.fasb .
	cp -p ../contrib/cffi*/libcffi.a .

bordeaux-threads.fasb libbordeaux-threads.a: bin/mkcl-small$(EXE) build-asdf-contrib.lsp alexandria.fasb ../contrib/bordeaux-threads-*/src/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf-contrib.lsp -- bordeaux-threads ../contrib/bordeaux-threads-*/
	cp -p ../contrib/bordeaux-threads*/bordeaux-threads.fasb .
	cp -p ../contrib/bordeaux-threads*/libbordeaux-threads.a .

fiveam.fasb libfiveam.a: bin/mkcl-small$(EXE) build-asdf-contrib.lsp alexandria.fasb ../contrib/fiveam-*/src/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf-contrib.lsp -- fiveam ../contrib/fiveam-*/
	cp -p ../contrib/fiveam*/src/fiveam.fasb .
	cp -p ../contrib/fiveam*/src/libfiveam.a .

rt.fasb librt.a: bin/mkcl-small$(EXE) build-asdf-contrib.lsp babel.fasb ../contrib/rt*/*.lisp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-asdf-contrib.lsp -- rt ../contrib/rt*/
	cp -p ../contrib/rt*/rt.fasb .
	cp -p ../contrib/rt*/librt.a .

cmp.fasb: bin/mkcl-small$(EXE) cmp/*.lsp build-cmp.lsp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-cmp.lsp

bin/mkcl-dyn: bin/mkcl-small$(EXE) cmp.fasb build-dynamic-mkcl.lsp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-dynamic-mkcl.lsp

bin/mkcl$(EXE): bin/mkcl-small$(EXE) cmp.fasb build-mkcl.lsp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-mkcl.lsp

ifeq (@thehost@,mingw32)
bin/mkcl-full$(EXE): bin/mkcl-small$(EXE) build-full-mkcl.lsp $(BUILTINS:%=lib%.a)
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-full-mkcl.lsp -- $(BUILTINS:%=lib%.a)
else
bin/mkcl-full$(EXE): bin/mkcl-small$(EXE) build-full-mkcl.lsp $(BUILTINS)
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load build-full-mkcl.lsp -- $(BUILTINS)
endif

HELP.DOC: dump-doc.lsp bin/mkcl$(EXE) doc/help.lsp
	MKCL_LIBDIR=$$(pwd)/ bin/mkcl-small$(EXE) -norc -q --external-format "(:ascii :lf)" -load dump-doc.lsp


mkcl_min$(EXE): $(LIBRARIES) @LIBPREFIX@mkclgc.@LIBEXT@ @LIBPREFIX@mkclmin.@LIBEXT@ c/cinit.o c/all_symbols.o .gdbinit
	$(CC) $(LDFLAGS) -o $@ c/cinit.o c/all_symbols.o @LIBPREFIX@mkclmin.@LIBEXT@ $(LIBRARIES) $(LIBS)


.gdbinit: util/gdbinit
	cp util/gdbinit $@

c/cinit.o:
	cd c; $(MAKE) depend; $(MAKE) cinit.o

c/all_symbols.o:
	cd c; $(MAKE) depend; $(MAKE) all_symbols.o

lsp/config.lsp: lsp/config.pre
	sed -e 's,@mkcldir\\@,$(mkcldir),g' < lsp/config.pre > lsp/config.lsp

lsp/config.pre: lsp/config.lsp.in
	./config.status

cmp/cmpdefs.lsp: cmp/cmpdefs.pre
	sed -e 's,@mkcldir\\@,"$(mkcldir)",g' \
	    -e 's,@libdir\\@,"$(libdir)",g' \
	    -e 's,@includedir\\@,"$(includedir)",g' < cmp/cmpdefs.pre > $@

cmp/cmpdefs.pre: cmp/cmpdefs.lsp.in
	./config.status

compile.lsp: compile.pre bare.lsp lsp/load.lsp clos/load.lsp cmp/load.lsp
	sed -e 's,@mkcldir\\@,$(mkcldir),g' \
	    -e 's,@libdir\\@,$(libdir),g' < compile.pre > compile.lsp

compile.pre: compile.lsp.in
	./config.status

bare.lsp: bare.lsp.in
	./config.status

lsp/load.lsp: lsp/load.lsp.in
	./config.status

clos/load.lsp: clos/load.lsp.in
	./config.status

cmp/load.lsp: cmp/load.lsp.in
	./config.status

bin/mkcl-config: bin/mkcl-config.pre
	sed -e 's,@libdir\\@,$(libdir),' \
	    -e 's,@includedir\\@,$(includedir),' bin/mkcl-config.pre > bin/mkcl-config

bin/mkcl-config.pre: util/mkcl-config
	./config.status


@LIBPREFIX@mkclmin.@LIBEXT@: c/*.d mkcl/*.h c/arch/*.d
	cd c; $(MAKE) depend; $(MAKE)

@LIBPREFIX@mkcltop.@LIBEXT@: c/main.d c/all_symbols.d c/symbols_list.h
	cd c; $(MAKE) depend; $(MAKE)

gc/.libs/@LIBPREFIX@gc.@LIBEXT@:
	cd gc; $(MAKE)

@LIBPREFIX@mkclgc.@LIBEXT@: gc/.libs/@LIBPREFIX@gc.@LIBEXT@
	cp -p gc/.libs/@LIBPREFIX@gc.@LIBEXT@ ./@LIBPREFIX@mkclgc.@LIBEXT@
	mkdir -p mkcl/gc
	cp -p gc/include/*.h mkcl/gc


mkcl/mkcl-cmp.h: mkcl/mkcl.h c/symbols_list.h
	touch $@

mkcl/mkcl.h: $(MKCL_HFILES)
	touch $@

mkcl/config-install.h: mkcl/config.h
	sed '/-CUT-/,$$d' ./mkcl/config.h > ./mkcl/config-install.h


BUILD-STAMP: config.status
	echo "#" `uname -a` > $@
	head -8 config.log | tail -6 >> $@

install: install-base install-contribs
#	cd doc; $(MAKE) prefix=$(prefix) install

install-base: all mkcl/config-install.h
	$(mkinstalldirs) $(bindir) $(libdir) \
	  $(mkcldir) $(includedir) $(includedir)/mkcl
	$(INSTALL_DATA) ../Copyright ../LGPL $(mkcldir)
	$(INSTALL_DATA) ../Copyright ../LGPL $(includedir)/mkcl
	for i in $(TARGETS); do \
	  $(INSTALL_PROGRAM) $$i $(bindir); \
	done
	if [ -d ENCODINGS ]; then \
	  $(mkinstalldirs) $(mkcldir)/ENCODINGS; \
	  for i in ./ENCODINGS/*; do \
	    $(INSTALL_DATA) $$i $(mkcldir)/ENCODINGS; \
	  done \
	fi
	$(INSTALL_DATA) ./mkcl/*.h $(includedir)/mkcl
	if (echo $(SUBDIRS) | grep gc); then \
	  $(mkinstalldirs) $(includedir)/mkcl/gc; \
	  $(INSTALL_DATA) ./mkcl/gc/*.h $(includedir)/mkcl/gc; \
	fi
	rm $(includedir)/mkcl/config.h
	mv $(includedir)/mkcl/config-install.h $(includedir)/mkcl/config.h
	$(INSTALL_SCRIPT) bin/mkcl-config $(bindir)
	for i in BUILD-STAMP HELP.DOC ; do \
	  $(INSTALL_DATA) $$i $(mkcldir); \
	done
	for i in $(LSP_LIBRARIES); do \
	  if test -s $$i ; then \
	    case $$i in \
	      *.dll) $(INSTALL_LIBRARY) $$i $(libdir); \
		     $(INSTALL_LIBRARY) $$i $(bindir);; \
	      *) $(INSTALL_LIBRARY) $$i $(libdir);; \
	    esac \
	  fi \
	done
	if [ "x@SONAME@" != "x" -a -f "@SONAME@" ]; then \
	  ( cd $(libdir) && rm -f @SONAME3@ @SONAME2@ @SONAME1@ && \
	    mv @SONAME@ @SONAME3@ && \
	    $(LN_S) @SONAME3@ @SONAME2@ && \
	    $(LN_S) @SONAME3@ @SONAME1@ && \
	    $(LN_S) @SONAME3@ @SONAME@ ) \
	fi
	for i in $(MKCL_STATIC_PARTS) $(LIBRARIES); do \
	  if test -s $$i ; then \
	    $(INSTALL_LIBRARY) $$i $(mkcldir); \
	  fi \
	done
	$(INSTALL_DATA) c/dpp$(EXE) $(mkcldir)
	$(INSTALL_DATA) mkcl_min$(EXE) $(mkcldir)
	$(INSTALL_DATA) cmp.asd $(mkcldir)
	if [ -f libcmp.a ] ; then $(INSTALL_DATA) libcmp.a $(mkcldir); fi
	$(INSTALL_PROGRAM) cmp.fasb $(mkcldir)

install-contribs: $(ASDF_FASLS) $(CONTRIB_FASLS)
	$(mkinstalldirs) $(mkcldir)/contrib/
	for i in *.asd; do $(INSTALL_DATA) $${i} $(mkcldir)/contrib/; done
	for i in asdf.fasb $(CONTRIB_FASLS) $(CONTRIB_STATIC_LIBS); do \
	  if test -s $$i; then \
	    case $$i in \
	      *.fasb) $(INSTALL_PROGRAM) $$i $(mkcldir)/contrib/;; \
	      *) $(INSTALL_DATA) $$i $(mkcldir)/contrib/;; \
	    esac; \
	  fi \
	done
	if [ -d ../contrib/asdf-bundle ]; then \
	  (cd ../contrib/; tar cf - asdf-bundle) | (cd $(mkcldir)/contrib/; tar xof -); \
	fi
	if [ -d ../contrib/slime ]; then \
	  (cd ../contrib/; tar cf - slime) | (cd $(mkcldir)/contrib/; tar xof -); \
	fi

install-local: install-base-local install-contribs-local

install-base-local: all mkcl/config-install.h
	$(mkinstalldirs) ./lib/ \
	  $(localmkcldir) ./include/ ./include//mkcl
	$(INSTALL_DATA) ../Copyright ../LGPL $(localmkcldir)
	$(INSTALL_DATA) ../Copyright ../LGPL ./include/mkcl
	if [ -d ENCODINGS ]; then \
	  $(mkinstalldirs) $(localmkcldir)/ENCODINGS; \
	  for i in ./ENCODINGS/*; do \
	    $(INSTALL_DATA) $$i $(localmkcldir)/ENCODINGS; \
	  done \
	fi
	$(INSTALL_DATA) ./mkcl/*.h ./include//mkcl
	if (echo $(SUBDIRS) | grep gc); then \
	  $(mkinstalldirs) ./include//mkcl/gc; \
	  $(INSTALL_DATA) ./mkcl/gc/*.h ./include//mkcl/gc; \
	fi
	rm ./include//mkcl/config.h
	mv ./include//mkcl/config-install.h ./include//mkcl/config.h
	for i in BUILD-STAMP HELP.DOC ; do \
	  $(INSTALL_DATA) $$i $(localmkcldir); \
	done
	for i in $(LSP_LIBRARIES); do \
	  if test -s $$i ; then \
	    case $$i in \
	      *.dll) $(INSTALL_LIBRARY) $$i ./lib/; \
		     $(INSTALL_LIBRARY) $$i ./bin/;; \
	      *) $(INSTALL_LIBRARY) $$i ./lib/;; \
	    esac \
	  fi \
	done
	if [ "x@SONAME@" != "x" -a -f "@SONAME@" ]; then \
	  ( cd ./lib/ && rm -f @SONAME3@ @SONAME2@ @SONAME1@ && \
	    mv @SONAME@ @SONAME3@ && \
	    $(LN_S) @SONAME3@ @SONAME2@ && \
	    $(LN_S) @SONAME3@ @SONAME1@ && \
	    $(LN_S) @SONAME3@ @SONAME@ ) \
	fi
	for i in $(MKCL_STATIC_PARTS) $(LIBRARIES); do \
	  if test -s $$i ; then \
	    $(INSTALL_LIBRARY) $$i $(localmkcldir); \
	  fi \
	done
	$(INSTALL_DATA) c/dpp$(EXE) $(localmkcldir)
	$(INSTALL_DATA) mkcl_min$(EXE) $(localmkcldir)
	$(INSTALL_DATA) cmp.asd $(localmkcldir)
	if [ -f libcmp.a ] ; then $(INSTALL_DATA) libcmp.a $(localmkcldir); fi
	$(INSTALL_PROGRAM) cmp.fasb $(localmkcldir)

install-contribs-local: $(ASDF_FASLS) $(CONTRIB_FASLS)
	$(mkinstalldirs) $(localmkcldir)/contrib/
	for i in *.asd; do $(INSTALL_DATA) $${i} $(localmkcldir)/contrib/; done
	for i in asdf.fasb $(CONTRIB_FASLS) $(CONTRIB_STATIC_LIBS); do \
	  if test -s $$i; then \
	    case $$i in \
	      *.fasb) $(INSTALL_PROGRAM) $$i $(localmkcldir)/contrib/;; \
	      *) $(INSTALL_DATA) $$i $(localmkcldir)/contrib/;; \
	    esac; \
	  fi \
	done
	cp -pR ../contrib/asdf-bundle $(localmkcldir)/contrib/


uninstall:
	for i in $(TARGETS) mkcl-config; do $(RM) $(bindir)/$$i; done
	$(RM) -r $(includedir)/mkcl $(mkcldir)
	for i in $(LSP_LIBRARIES); do \
	  case $$i in \
	    *.dll) $(RM) $(libdir)/$$i || : ; $(RM) $(bindir)/$$i || : ;;
	    *) $(RM) $(libdir)/$$i || : ;; \
	  esac \
	done
#	cd doc; $(MAKE) uninstall

doc: $(TARGETS)
	cd doc; $(MAKE)

clean: clean_lisp clean_contribs
	cd c; $(MAKE) clean
	$(RM) compile.lsp bin/mkcl-config BUILD-STAMP mkcl/config-install.h
	$(RM) mkcl_min$(EXE) bin/mkcl$(EXE) bin/mkcl-dyn bin/mkcl-small$(EXE) bin/mkcl-full$(EXE)
	$(RM) MKCLINIT* bin/MKCLINIT*
	$(RM) MKC*.c MKC*.tmp bin/MKC*.c bin/MKC*.tmp
	$(RM) -r ENCODINGS
	$(RM) MODULES HELP.DOC TAGS *.asd
	$(RM) mkcl/gc/*.h ./@LIBPREFIX@mkclgc.@LIBEXT@
	$(RM) mkcl/gmp.h ./@LIBPREFIX@mkclgmp.@LIBEXT@
	$(RM) *.dll bin/*.dll
	$(RM) *.o *.a *.la *.so *.data *.fasb *.fas core core.* a.out
	cd bin; $(RM) *.o *.a *.la *.so *.data *.fasb *.fas core core.* a.out
	$(RM) -r lib include

clean_contribs:
	$(RM) -r ext
	cd ../contrib; sh ./clean_up.sh
	$(RM) asdf.fasb $(CONTRIB_FASLS) $(CONTRIB_FASLS:%.fasb=%.asd)

clean_lisp:
	for i in lsp cmp clos; \
	do $(RM) lib$$i.a $$i/?*.{o,data,c,sdat,h,fasb,fas}; done
	$(RM) lsp/config.lsp cmp/cmpdefs.lsp

distclean: clean
	cd c; $(MAKE) distclean
	$(RM) bin/mkcl-config.pre
	$(RM) Makefile bare.lsp compile.pre
	$(RM) doc/Makefile doc/mkcl.man doc/mkcl-config.man
	$(RM) mkcl/config.h mkcl/configpre.h
	$(RM) lsp/config.pre lsp/load.lsp clos/load.lsp
	$(RM) cmp/cmpdefs.pre cmp/load.lsp
	(cd gc; $(MAKE) distclean)
	$(RM) config.status config.version config.log config.cache

realclean: distclean
	cd c; $(MAKE) realclean
	$(RM) *~

TAGS: lsp/*.lsp lsp/config.pre clos/*.lsp cmp/*.lsp cmp/cmpdefs.pre c/*.d c/*.h c/arch/*.d mkcl/*.h
	if type etags >/dev/null 2>&1; then  \
	  if etags --help | grep -q -e "--language-force"; then \
	    etags -R lsp/*.lsp lsp/config.pre clos/*.lsp cmp/*.lsp cmp/cmpdefs.pre --language-force=c c/*.d c/*.h c/arch/*.d mkcl/*.h; \
	  else \
	    etags -R lsp/*.lsp lsp/config.pre clos/*.lsp cmp/*.lsp cmp/cmpdefs.pre --language=c c/*.d c/*.h c/arch/*.d mkcl/*.h; \
	  fi \
	else touch TAGS; fi



depend:
	cd c; $(MAKE) depend