mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-12 04:11:18 -08:00
248 lines
7.9 KiB
Makefile
248 lines
7.9 KiB
Makefile
#
|
|
# Makefile for ECoLisp
|
|
#
|
|
top_srcdir= @top_srcdir@
|
|
srcdir = @srcdir@
|
|
mandir=@mandir@
|
|
manext=1
|
|
|
|
# Programs used by "make":
|
|
#
|
|
|
|
@SET_MAKE@
|
|
CC = @ECL_CC@
|
|
LIBS = @LIBS@
|
|
FASL_LIBS = @FASL_LIBS@
|
|
CORE_LIBS = @CORE_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@/
|
|
ecldir=@ecldir@/
|
|
|
|
# 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) $(top_srcdir)/gc/mkinstalldirs
|
|
|
|
# Files
|
|
|
|
SUBDIRS = @SUBDIRS@
|
|
LIBRARIES = @LIBRARIES@
|
|
LSP_LIBRARIES = @LSP_LIBRARIES@
|
|
TARGETS = @TARGETS@
|
|
ECL_CMPDIR = @ECL_CMPDIR@
|
|
|
|
all: $(TARGETS) bin/ecl-config TAGS
|
|
.PHONY: all
|
|
|
|
%Makefile: $(srcdir)/%Makefile.in config.status
|
|
./config.status
|
|
|
|
#
|
|
# When compiling the library itself, we have to remove the dllimport
|
|
# declarations, because the variables that they mark are in the
|
|
# in the library and can be referenced without indirection.
|
|
#
|
|
c/ecl/external.h: $(top_srcdir)/h/external.h
|
|
test -d c/ecl || mkdir c/ecl
|
|
sed 's,__declspec(dllimport),,g' $(top_srcdir)/h/external.h > $@
|
|
ecl/external.h: c/ecl/external.h c/ecl/external.h
|
|
cp $(srcdir)/h/*.h ecl/
|
|
|
|
bin/ecl$(EXE): ecl_min$(EXE) compile.lsp ecl/external.h build-stamp $(top_srcdir)/lsp/*.lsp
|
|
cp $(top_srcdir)/../contrib/unicode/ucd.dat .
|
|
if [ -f CROSS-COMPILER ]; then \
|
|
./CROSS-COMPILER compile; \
|
|
else \
|
|
ECLDIR=`pwd`/ ./ecl_min$(EXE) compile; \
|
|
fi
|
|
|
|
ecl_min$(EXE): $(LIBRARIES) .gdbinit @LIBPREFIX@eclmin.@LIBEXT@
|
|
if [ -f CROSS-COMPILER ]; then \
|
|
touch $@; \
|
|
else \
|
|
$(CC) $(LDFLAGS) -o $@ cinit.o c/all_symbols.o -L./ @LIBPREFIX@eclmin.@LIBEXT@ $(CORE_LIBS) $(FASL_LIBS) $(LIBS);\
|
|
fi
|
|
mini_ecl: ecl_min$(EXE) bare2.lsp
|
|
(echo '#!/bin/sh'; echo './ecl_min bare2.lsp') > $@
|
|
chmod +x $@
|
|
bare2.lsp:
|
|
echo '(load "bare")(si::top-level)' > $@
|
|
|
|
.gdbinit: $(srcdir)/util/gdbinit
|
|
cp $(srcdir)/util/gdbinit $@
|
|
|
|
lsp/config.lsp: lsp/config.pre
|
|
sed -e 's,@ecldir\\@,$(ecldir),g' < lsp/config.pre > lsp/config.lsp
|
|
$(ECL_CMPDIR)/cmpdefs.lsp: $(ECL_CMPDIR)/cmpdefs.pre
|
|
sed -e 's,@ecldir\\@,"$(ecldir)",g' \
|
|
-e 's,@libdir\\@,"$(libdir)",g' \
|
|
-e 's,@includedir\\@,"$(includedir)",g' < $(ECL_CMPDIR)/cmpdefs.pre > $@
|
|
compile.lsp: compile.pre
|
|
sed -e 's,@ecldir\\@,$(ecldir),g' \
|
|
-e 's,@libdir\\@,$(libdir),g' < compile.pre > compile.lsp
|
|
bin/ecl-config: bin/ecl-config.pre
|
|
sed -e 's,@libdir\\@,$(libdir),' \
|
|
-e 's,@includedir\\@,$(includedir),' \
|
|
-e 's,~A,$(libdir),' bin/ecl-config.pre > bin/ecl-config
|
|
|
|
|
|
@LIBPREFIX@eclmin.@LIBEXT@: @LIBPREFIX@eclgmp.@LIBEXT@ @LIBPREFIX@eclgc.@LIBEXT@ lsp/config.lsp $(ECL_CMPDIR)/cmpdefs.lsp ecl/external.h $(top_srcdir)/c/*.d
|
|
cd c; $(MAKE)
|
|
@LIBPREFIX@eclgc.@LIBEXT@:
|
|
test -d ecl/gc || mkdir ecl/gc
|
|
test -d ecl/gc/private || mkdir ecl/gc/private
|
|
if (echo $(SUBDIRS) | grep gc); then \
|
|
cd gc && $(MAKE) install && cd .. && \
|
|
cp -rf $(srcdir)/gc/include/private/*.h ecl/gc/private/ && \
|
|
mv @LIBPREFIX@gc.@LIBEXT@ @LIBPREFIX@eclgc.@LIBEXT@; \
|
|
fi
|
|
@LIBPREFIX@eclgmp.@LIBEXT@:
|
|
if (echo $(SUBDIRS) | grep gmp); then \
|
|
cd gmp && $(MAKE) install && \
|
|
cd .. && mv include/gmp.h ecl/ && rmdir include && \
|
|
mv ./@LIBPREFIX@gmp.@LIBEXT@ ./@LIBPREFIX@eclgmp.@LIBEXT@; \
|
|
fi
|
|
|
|
rt.lisp:
|
|
cp $(srcdir)/../contrib/rt/rt.lisp ./
|
|
|
|
build-stamp: config.status
|
|
echo "#" `uname -a` > $@
|
|
head -8 config.log | tail -6 >> $@
|
|
install:
|
|
# Here we would use the option -s but the install program in sourceforge-solaris
|
|
# is broken.
|
|
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(libdir) \
|
|
$(DESTDIR)$(ecldir) $(DESTDIR)$(includedir) $(DESTDIR)$(includedir)/ecl
|
|
for i in $(TARGETS); do \
|
|
$(INSTALL_PROGRAM) $$i $(DESTDIR)$(bindir); \
|
|
done
|
|
$(INSTALL_DATA) ucd.dat $(DESTDIR)$(ecldir)/
|
|
if [ -d encodings ]; then \
|
|
$(mkinstalldirs) $(DESTDIR)$(ecldir)/encodings; \
|
|
for i in ./encodings/*; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(ecldir)/encodings; \
|
|
done \
|
|
fi
|
|
sed '/-CUT-/,$$d' ./ecl/config.h > ./ecl/config-install.h
|
|
$(INSTALL_DATA) ./ecl/*.h $(DESTDIR)$(includedir)/ecl
|
|
if (echo $(SUBDIRS) | grep gc); then \
|
|
$(mkinstalldirs) $(DESTDIR)$(includedir)/ecl/gc/private; \
|
|
$(INSTALL_DATA) ./ecl/gc/*.h $(DESTDIR)$(includedir)/ecl/gc; \
|
|
$(INSTALL_DATA) ./ecl/gc/private/*.h $(DESTDIR)$(includedir)/ecl/gc/private; \
|
|
fi
|
|
rm $(DESTDIR)$(includedir)/ecl/config.h
|
|
mv $(DESTDIR)$(includedir)/ecl/config-install.h $(DESTDIR)$(includedir)/ecl/config.h
|
|
$(INSTALL_SCRIPT) bin/ecl-config $(DESTDIR)$(bindir)
|
|
for i in build-stamp help.doc TAGS ; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(ecldir); \
|
|
done
|
|
for i in $(LSP_LIBRARIES) $(LIBRARIES); do \
|
|
if test -s $$i ; then \
|
|
if echo $$i | grep dll; then \
|
|
$(INSTALL_LIBRARY) $$i $(DESTDIR)$(bindir); \
|
|
fi; \
|
|
$(INSTALL_LIBRARY) $$i $(DESTDIR)$(libdir); \
|
|
fi \
|
|
done
|
|
if [ "x@SONAME@" != "x" -a -f "@SONAME@" ]; then \
|
|
( cd $(DESTDIR)$(libdir) && rm -f @SONAME3@ @SONAME2@ @SONAME1@ && \
|
|
mv @SONAME@ @SONAME3@ && \
|
|
$(LN_S) @SONAME3@ @SONAME2@ && \
|
|
$(LN_S) @SONAME3@ @SONAME1@ && \
|
|
$(LN_S) @SONAME3@ @SONAME@ ) \
|
|
fi
|
|
$(INSTALL_PROGRAM) c/dpp$(EXE) $(DESTDIR)$(ecldir)
|
|
$(INSTALL_PROGRAM) c/ecl_min(EXE) $(DESTDIR)$(ecldir)
|
|
for i in `cat modules`; do \
|
|
case $$i in \
|
|
*.fas) $(INSTALL_PROGRAM) $$i $(DESTDIR)$(ecldir);; \
|
|
*) $(INSTALL_DATA) $$i $(DESTDIR)$(ecldir);; \
|
|
esac \
|
|
done
|
|
for i in Copyright LGPL; do \
|
|
$(INSTALL_DATA) $(top_srcdir)/../$$i $(DESTDIR)$(ecldir); \
|
|
done
|
|
$(mkinstalldirs) $(DESTDIR)$(mandir)/man$(manext)
|
|
for i in doc/ecl.man doc/ecl-config.man; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man$(manext)/ecl.$(manext); \
|
|
done
|
|
|
|
flatinstall: build-stamp
|
|
$(MAKE) DESTDIR=$(DESTDIR) bindir=$(prefix) libdir=$(prefix) \
|
|
includedir=$(prefix) ecldir=$(prefix) install
|
|
|
|
uninstall:
|
|
for i in $(TARGETS) ecl-config; do $(RM) $(DESTDIR)$(bindir)/$$i; done
|
|
$(RM) -r $(DESTDIR)$(includedir)/ecl $(DESTDIR)$(ecldir)
|
|
for i in $(LSP_LIBRARIES) $(LIBRARIES) Copyright LGPL; do \
|
|
$(RM) $(DESTDIR)$(libdir)/$$i || : ; \
|
|
done
|
|
rm $(DESTDIR)$(mandir)/man$(manext)/ecl.$(manext)
|
|
rm $(DESTDIR)$(mandir)/man$(manext)/ecl-config.$(manext)
|
|
|
|
clean: mostlyclean
|
|
$(RM) -r *
|
|
mostlyclean: clean_lisp
|
|
for i in $(SUBDIRS); do (cd $$i; $(MAKE) clean); done
|
|
$(RM) ecl_min$(EXE) bin/ecl$(EXE) help.doc core a.out TAGS
|
|
$(RM) config.version config.log config.cache
|
|
$(RM) *.c *.o *.a *.h *.data *.fas *.dat *.la *.so *.dylib
|
|
clean_lisp:
|
|
for i in lsp cmp clos clx tk ext; do $(RM) lib$$i.a $$i/?*.{o,data,c,sdat,h,fas}; done
|
|
$(RM) help.doc
|
|
distclean: clean
|
|
realclean: distclean
|
|
#
|
|
# Rebuild ECL using recent changes and compare
|
|
#
|
|
test_changes:
|
|
test -d old || mkdir old
|
|
cp -rf lsp clos cmp old/
|
|
$(MAKE) clean_lisp; $(MAKE) -C c clean; $(RM) -f bin/ecl$(EXE)
|
|
$(MAKE)
|
|
for i in lsp clos cmp; do diff --exclude=\*.o $$i old/$$i; done
|
|
#
|
|
# Rebuild ECL using its own image and compare. Does not work
|
|
# right now.
|
|
#
|
|
selfbuild:
|
|
exit 2
|
|
test -d stage2 || mkdir stage2
|
|
cp -rf lsp clos cmp stage2
|
|
-for i in lsp cmp clos clx tk; do test -f lib$$i.a && mv lib$$i.a stage2; done
|
|
$(MAKE) clean_lisp
|
|
./ecl compile
|
|
-for i in lsp clos cmp clx tk; do test -d $$i && diff --exclude=\*.o $$i stage2/$$i; done | less
|
|
|
|
# Make sure to also include *.d files; and match DPP's idiosyncracies
|
|
# like "@si::foo" and "@(defun si::foo".
|
|
# This rule is allowed to fail when etags does not exist.
|
|
TAGS:
|
|
echo > $@;
|
|
-srcfiles=`find $(srcdir)/c/ $(srcdir)/h/ -name '*.[chd]'`; \
|
|
etags --language=c -o $@ $$srcfiles && \
|
|
etags --language=none -o $@ --append \
|
|
--regex='/@\([-:*a-zA-z]+\)/\1/' \
|
|
--regex='/@(defun \([-:*a-zA-z]+\)/\1/' \
|
|
$$srcfiles
|
|
|