# directories where files are installed, and their parent
# directories. There is a script called `mkinstalldirs' which is
# convenient for this; find it in the Texinfo package.
-# (FPTOOLS: we don't use the suggested script, but rather the
-# mkdirhier script in glafp_utils -- SOF)
+# (FPTOOLS: we use a close relative of the suggested script, situated
+# in glafp-utils/mkdirhier -- SOF)
# friends can be overridden from their original settings in mk/config.mk.in
# || mk/build.mk
#
-.PHONY: install installdirs install-strip install-dirs uninstall install-docs
+.PHONY: install installdirs install-strip install-dirs uninstall install-docs show-install
+
+show-install :
+ @echo "bindir = $(bindir)"
+ @echo "libdir = $(libdir)"
+ @echo "libexecdir = $(libexecdir) # by default, same as libdir"
+ @echo "datadir = $(datadir) # unused for ghc project"
#
# Sometimes useful to separate out the creation of install directories
# from the installation itself.
#
-installdirs ::
+install-dirs ::
@$(INSTALL_DIR) $(bindir)
@$(INSTALL_DIR) $(libdir)
@$(INSTALL_DIR) $(libexecdir)
@$(INSTALL_DIR) $(datadir)
# Better do this first...
-install:: installdirs
+# but we won't for the moment, do it on-demand from
+# within the various install targets instead.
+#install:: install-dirs
ifneq "$(INSTALL_PROGS)" ""
install:: $(INSTALL_PROGS)
+ @$(INSTALL_DIR) $(bindir)
for i in $(INSTALL_PROGS); do \
$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(bindir); \
done
endif
-
+#
+# Just like INSTALL_PROGS, but prefix with install sites bin/lib/data and
+# install without stripping.
+#
ifneq "$(INSTALL_SCRIPTS)" ""
install:: $(INSTALL_SCRIPTS)
+ @$(INSTALL_DIR) $(bindir)
ifeq "$(INTERP)" "perl"
ifneq "$(BIN_DIST)" "1"
@for i in $(INSTALL_SCRIPTS); do \
echo "eval 'exec $(PERL) -S $$$""0 $$""{1+\"$$$""@\"}'" > $$i.tmp ; \
echo " if $$""running_under_some_shell;" >> $$i.tmp ; \
echo $$"bindir='$(bindir)';" >> $$i.tmp ; \
- echo $$"libdir='$(real_libdir)';" >> $$i.tmp ; \
- echo $$"datadir='$(real_datadir)';" >> $$i.tmp ; \
+ echo $$"libdir='$(libdir)';" >> $$i.tmp ; \
+ echo $$"libexecdir='$(libexecdir)';" >> $$i.tmp ; \
+ echo $$"datadir='$(datadir)';" >> $$i.tmp ; \
cat $$i >> $$i.tmp ; \
- echo $(INSTALL_PROGRAM) $(INSTALL_OPTS) $$i $(bindir) ; \
- $(INSTALL_PROGRAM) $(INSTALL_OPTS) $$i.tmp $(bindir)/$$i ; \
+ echo $(INSTALL_PROGRAM) $(filter-out -s,$(INSTALL_OPTS)) $$i.tmp $(bindir)/$$i ; \
+ $(INSTALL_PROGRAM) $(filter-out -s,$(INSTALL_BIN_OPTS)) $$i.tmp $(bindir)/$$i ; \
$(RM) $$i.tmp; \
done
else
ifneq "$(INSTALL_LIB_SCRIPTS)" ""
install:: $(INSTALL_LIB_SCRIPTS)
+ @$(INSTALL_DIR) $(libdir)
ifeq "$(INTERP)" "perl"
ifneq "$(BIN_DIST)" "1"
@for i in $(INSTALL_LIB_SCRIPTS); do \
echo "eval 'exec $(PERL) -S $$$""0 $$""{1+\"$$$""@\"}'" > $$i.tmp ; \
echo " if $$""running_under_some_shell;" >> $$i.tmp ; \
echo $$"bindir='$(bindir)';" >> $$i.tmp ; \
- echo $$"libdir='$(real_libdir)';" >> $$i.tmp ; \
- echo $$"datadir='$(real_datadir)';" >> $$i.tmp ; \
+ echo $$"libdir='$(libdir)';" >> $$i.tmp ; \
+ echo $$"libexecdir='$(libexecdir)';" >> $$i.tmp ; \
+ echo $$"datadir='$(datadir)';" >> $$i.tmp ; \
cat $$i >> $$i.tmp ; \
echo $(INSTALL_PROGRAM) $(INSTALL_OPTS) $$i $(libdir) ; \
$(INSTALL_PROGRAM) $(INSTALL_OPTS) $$i.tmp $(libdir)/$$i ; \
ifneq "$(INSTALL_LIBEXEC_SCRIPTS)" ""
install:: $(INSTALL_LIBEXEC_SCRIPTS)
+ @$(INSTALL_DIR) $(libexecdir)
ifeq "$(INTERP)" "perl"
ifneq "$(BIN_DIST)" "1"
@for i in $(INSTALL_LIBEXEC_SCRIPTS); do \
echo "eval 'exec $(PERL) -S $$$""0 $$""{1+\"$$$""@\"}'" > $$i.tmp ; \
echo " if $$""running_under_some_shell;" >> $$i.tmp ; \
echo $$"bindir='$(bindir)';" >> $$i.tmp ; \
- echo $$"libdir='$(real_libdir)';" >> $$i.tmp ; \
- echo $$"datadir='$(real_datadir)';" >> $$i.tmp ; \
+ echo $$"libdir='$(libdir)';" >> $$i.tmp ; \
+ echo $$"libexecdir='$(libexecdir)';" >> $$i.tmp ; \
+ echo $$"datadir='$(datadir)';" >> $$i.tmp ; \
cat $$i >> $$i.tmp ; \
echo $(INSTALL_PROGRAM) $(INSTALL_OPTS) $$i $(libexecdir) ; \
$(INSTALL_PROGRAM) $(INSTALL_OPTS) $$i.tmp $(libexecdir)/$$i ; \
ifneq "$(INSTALL_LIBS)" ""
install:: $(INSTALL_LIBS)
+ @$(INSTALL_DIR) $(libdir)
for i in $(INSTALL_LIBS); do \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(libdir); \
done
ifneq "$(INSTALL_LIBEXECS)" ""
install:: $(INSTALL_LIBEXECS)
+ @$(INSTALL_DIR) $(libexecdir)
-for i in $(INSTALL_LIBEXECS); do \
$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(libexecdir); \
done
ifneq "$(INSTALL_DATAS)" ""
install:: $(INSTALL_DATAS)
+ @$(INSTALL_DIR) $(datadir)
for i in $(INSTALL_DATAS); do \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(datadir); \
done
# $ find yes -exec echo oh,{}! \;
# oh,yes!
#
-# Of course, the above is not impossible toi achieve with other finds,
+# Of course, the above is not impossible to achieve with other finds,
# just that GNU find does the Patently Right Thing here :)
#
# ====> if you're using these dist rules, get hold of GNU findutils.
#
.PHONY: dist dist-pre dist-post
+#
+# The dist rules leaves out CVS, SRC (from mkshadowdir) and tests
+# directories when creating shadow source distrib tree
+#
dist-pre::
-rm -rf $(SRC_DIST_DIR)
-rm -f $(SRC_DIST_NAME).tar.gz
- (cd $(FPTOOLS_TOP_ABS); find $(SRC_DIST_DIRS) -type d \( -name CVS -prune -o -name SRC -prune -o -exec $(MKDIRHIER) $(SRC_DIST_DIR)/{} \; \) ; )
- (cd $(FPTOOLS_TOP_ABS); find $(SRC_DIST_DIRS) -name CVS -prune -o -name SRC -prune -o -name "*~" -prune -o -name ".cvsignore" -prune -o -type l -exec $(LN_S) $(FPTOOLS_TOP_ABS)/{} $(SRC_DIST_DIR)/{} \; )
+ (cd $(FPTOOLS_TOP_ABS); find $(SRC_DIST_DIRS) -type d \( -name CVS -prune -o -name SRC -prune -o -name tests -prune -o -exec $(MKDIRHIER) $(SRC_DIST_DIR)/{} \; \) ; )
+ (cd $(FPTOOLS_TOP_ABS); find $(SRC_DIST_DIRS) -name CVS -prune -o -name SRC -prune -o -name tests -prune -o -name "*~" -prune -o -name ".cvsignore" -prune -o -type l -exec $(LN_S) $(FPTOOLS_TOP_ABS)/{} $(SRC_DIST_DIR)/{} \; )
#
# After having created a shadow distribution tree and copied/linked
# all the necessary files to it, `dist-post' makes sure the permissions
-# are set right and packages up the tree.
+# are set right and then package up the tree. Empty directories are also removed.
#
# For now, we make the packaging a separate rule, so as to allow
# the inspection of the dist tree before eventually packaging it up.
#
dist-post::
+ @echo Deleting the following empty directories..
+ ( cd $(SRC_DIST_DIR) ; cd .. ; find $(SRC_DIST_NAME) -type d -exec sh -c 'test x`ls $$0 | wc -l | sed -e "s/ //g"` = x0' {} \; -print -exec rm -rf {} \; -prune )
( cd $(SRC_DIST_DIR) ; cd .. ; chmod -R a+rw $(SRC_DIST_NAME) )
dist-package::
cd $(SRC_DIST_DIR); cd ..; $(TAR) chzf $(SRC_DIST_NAME).tar.gz $(SRC_DIST_NAME)
#
+
+
# The default dist rule:
#
# copy/link the contents of $(SRC_DIST_FILES) into the
LIB_WAY_TARGETS = $(foreach way,$(WAYS),%_$(way).a %_$(way))
# $@ will be something like Foo.p_o
-# $(suffix $@) will be .p_o
-# The sed script extracts the "p" part.
-
+# $(suffix $@) returns .p_o
+# $(subst .,.p_o) returns p_o
+# $(subst _,.,p_o) returns p.o (clever)
+# $(basename p.o) returns p
+#
$(WAY_TARGETS) :
$(MAKE) way=$(basename $(subst _,.,$(subst .,,$(suffix $@)))) $@
$(MAKE) way=$$i --no-print-directory $(MFLAGS) $@ ; \
done
@echo "------------------------------------------------------------------------"
- @echo "===fptools== Finished recusrively making \`$@' for ways: $(WAYS) ..."
+ @echo "===fptools== Finished recursively making \`$@' for ways: $(WAYS) ..."
@echo "PWD = $(shell pwd)"
@echo "------------------------------------------------------------------------"