hdirect-0.21.0: mk/target.mk
#-----------------------------------------------------------------------------
#
# target.mk project stub
#
#-----------------------------------------------------------------------------
# We need to set TOP to be the TOP that the next level up expects!
# The TOP variable is reset after the inclusion of the fptools
# boilerplate, so we stash TOP away first:
ifneq "$(STANDALONE_DIST)" "YES"
HDIRECT_TOP := $(TOP)
TOP:=$(TOP)/..
ifneq "$(HDirectHC)" ""
HC=$(HDirectHC)
MKDEPENDHS=$(HDirectHC)
endif
include $(TOP)/mk/target.mk
# Reset TOP
TOP:=$(HDIRECT_TOP)
endif
ifeq "$(STANDALONE_DIST)" "YES"
.PHONY: all
ifneq "$(HS_PROG)" ""
all :: $(HS_PROG)
$(HS_PROG) :: $(HS_OBJS)
$(HC) -o $@ $(HC_OPTS) $(LD_OPTS) $(HS_OBJS) $(LIBS)
endif
ifneq "$(C_PROG)" ""
all :: $(C_PROG)
$(C_PROG) :: $(C_OBJS)
$(CC) -o $@ $(CC_OPTS) $(LD_OPTS) $(C_OBJS) $(LIBS)
endif
ifneq "$(LIBRARY)" ""
all :: $(LIBRARY)
$(LIBRARY) :: $(LIBOBJS)
$(RM) $@
$(AR) $(AR_OPTS) $@ $(LIBOBJS)
endif
ifneq "$(MOSTLY_CLEAN_FILES)" ""
mostlyclean::
rm -f $(MOSTLY_CLEAN_FILES)
endif
ifneq "$(CLEAN_FILES)" ""
clean:: mostlyclean
rm -f $(CLEAN_FILES)
endif
.PHONY: depend
# Compiler produced files that are targets of the source's imports.
MKDEPENDHS_OBJ_SUFFICES=o
depend :: $(MKDEPENDHS_SRCS) $(MKDEPENDC_SRCS)
@$(RM) .depend
@touch .depend
ifneq "$(DOC_SRCS)" ""
$(MKDEPENDLIT) -o .depend $(MKDEPENDLIT_OPTS) $(filter %.lit,$(DOC_SRCS))
endif
ifneq "$(MKDEPENDHS_SRCS)" ""
$(MKDEPENDHS) -M -optdep-f -optdep.depend $(foreach way,$(WAYS),-optdep-s -optdep$(way)) $(foreach obj,$(MKDEPENDHS_OBJ_SUFFICES),-optdep-o -optdep$(obj)) $(MKDEPENDHS_OPTS) $(patsubst -odir,,$(HC_OPTS)) $(MKDEPENDHS_SRCS)
endif
# the above patsubst is a hack to remove the '-odir $*' from HC_OPTS
# which is present when we're splitting objects. The $* maps to
# nothing, since this isn't a pattern rule, so we have to get rid of
# the -odir too to avoid problems.
.PHONY: boot
boot :: depend
ifneq "$(SUBDIRS)" ""
all docs runtests boot TAGS clean veryclean maintainer-clean install info ::
@echo "------------------------------------------------------------------------"
@echo "===fptools== Recursively making \`$@' in $(SUBDIRS) ..."
@echo "PWD = $(shell pwd)"
@echo "------------------------------------------------------------------------"
# Don't rely on -e working, instead we check exit return codes from sub-makes.
@case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
for i in $(SUBDIRS); do \
echo "------------------------------------------------------------------------"; \
echo "==fptools== $(MAKE) $@ $(MFLAGS);"; \
echo " in $(shell pwd)/$$i"; \
echo "------------------------------------------------------------------------"; \
$(MAKE) --no-print-directory -C $$i $(MFLAGS) $@; \
if [ $$? -eq 0 -o $$x_on_err -eq 0 ] ; then true; else exit 1; fi; \
done
@echo "------------------------------------------------------------------------"
@echo "===fptools== Finished making \`$@' in $(SUBDIRS) ..."
@echo "PWD = $(shell pwd)"
@echo "------------------------------------------------------------------------"
endif
###########################################
#
# Targets: install install-strip uninstall
#
###########################################
# For each of these variables that is defined, you
# get one install rule
#
# INSTALL_PROGS executable programs in $(bindir)
# INSTALL_SCRIPTS executable scripts in $(bindir)
# INSTALL_LIBS platform-dependent libraries in $(libdir) (ranlib'ed)
# INSTALL_LIB_SCRIPTS platform-dependent scripts in $(libdir)
# INSTALL_LIBEXECS platform-dependent execs in $(libdir)
# INSTALL_DATAS platform-independent files in $(datadir)
#
# If the installation directory variable is undefined, the install rule simply
# emits a suitable error message.
#
# Remember, too, that the installation directory variables ($(bindir) and
# 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 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"
INSTALL_DIR=$(TOP)/mkdirhier
INSTALL=$(TOP)/install-sh
INSTALL_PROGRAM = $(INSTALL) -m 755
INSTALL_SCRIPT = $(INSTALL) -m 755
INSTALL_DATA = $(INSTALL) -m 644
RANLIB=:
#
# Sometimes useful to separate out the creation of install directories
# from the installation itself.
#
install-dirs ::
@$(INSTALL_DIR) $(bindir)
@$(INSTALL_DIR) $(libdir)
@$(INSTALL_DIR) $(libexecdir)
@$(INSTALL_DIR) $(datadir)
# Better do this first...
# but we won't for the moment, do it on-demand from
# within the various install targets instead.
#install:: install-dirs
ifneq "$(INSTALL_PROGS)" ""
#
# Here's an interesting one - when using the win32 version
# of install (provided via the cygwin toolkit), we have to
# supply the .exe suffix, *if* there's no other suffix.
#
# The rule below does this by ferreting out the suffix of each
# entry in the INSTALL_PROGS list. If there's no suffix, use
# $(exeext).
#
# This is bit of a pain to express since GNU make doesn't have
# something like $(if ...), but possible using $(subst ..)
# [Aside: I added support for $(if ..) to my local copy of GNU
# make at one stage, perhaps I should propagate the patch to
# the GNU make maintainers..]
#
INSTALL_PROGS := $(foreach p, $(INSTALL_PROGS), $(addsuffix $(subst _,,$(subst __,$(exeext),_$(suffix $(p))_)), $(basename $(p))))
install:: $(INSTALL_PROGS)
@$(INSTALL_DIR) $(bindir)
@for i in $(INSTALL_PROGS); do \
echo $(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(bindir); \
$(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)
for i in $(INSTALL_SCRIPTS); do \
$(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i $(bindir); \
done
endif
ifneq "$(INSTALL_LIB_SCRIPTS)" ""
install:: $(INSTALL_LIB_SCRIPTS)
@$(INSTALL_DIR) $(libdir)
for i in $(INSTALL_LIB_SCRIPTS); do \
$(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i $(libdir); \
done
endif
ifneq "$(INSTALL_LIBEXEC_SCRIPTS)" ""
install:: $(INSTALL_LIBEXEC_SCRIPTS)
@$(INSTALL_DIR) $(libexecdir)
for i in $(INSTALL_LIBEXEC_SCRIPTS); do \
$(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i $(libexecdir); \
done
endif
ifneq "$(INSTALL_LIBS)" ""
install:: $(INSTALL_LIBS)
@$(INSTALL_DIR) $(libdir)
for i in $(INSTALL_LIBS); do \
case $$i in \
*.a) \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(libdir); \
$(RANLIB) $(libdir)/`basename $$i` ;; \
*.dll) \
$(INSTALL_DATA) -s $(INSTALL_OPTS) $$i $(libdir) ;; \
*) \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(libdir); \
esac; \
done
endif
ifneq "$(INSTALL_LIBEXECS)" ""
#
# See above comment next to defn of INSTALL_PROGS for what
# the purpose of this one-liner is.
#
INSTALL_LIBEXECS := $(foreach p, $(INSTALL_LIBEXECS), $(addsuffix $(subst _,,$(subst __,$(exeext),_$(suffix $(p))_)), $(basename $(p))))
install:: $(INSTALL_LIBEXECS)
@$(INSTALL_DIR) $(libexecdir)
-for i in $(INSTALL_LIBEXECS); do \
$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(libexecdir); \
done
endif
ifneq "$(INSTALL_DATAS)" ""
install:: $(INSTALL_DATAS)
@$(INSTALL_DIR) $(datadir)
for i in $(INSTALL_DATAS); do \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(datadir); \
done
endif
ifneq "$(INSTALL_INCLUDES)" ""
install:: $(INSTALL_INCLUDES)
@$(INSTALL_DIR) $(includedir)
for i in $(INSTALL_INCLUDES); do \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(includedir); \
done
endif
#
# Use with care..
#
uninstall::
@for i in $(INSTALL_PROGS) "" ; do \
if test "$$i"; then \
echo rm -f $(bindir)/`basename $$i`; \
rm -f $(bindir)/`basename $$i`; \
fi; \
done
@for i in $(INSTALL_LIBS) ""; do \
if test "$$i"; then \
echo rm -f $(libdir)/`basename $$i`; \
rm -f $(libdir)/`basename $$i`; \
fi; \
done
@for i in $(INSTALL_LIBEXECS) ""; do \
if test "$$i"; then \
echo rm -f $(libexecdir)/`basename $$i`; \
rm -f $(libexecdir)/`basename $$i`; \
fi; \
done
@for i in $(INSTALL_DATAS) ""; do \
if test "$$i"; then \
echo rm -f $(datadir)/`basename $$i`; \
rm -f $(datadir)/`basename $$i`; \
fi; \
done
#
# install-strip is from the GNU Makefile standard.
#
ifneq "$(way)" ""
install-strip::
@$(MAKE) EXTRA_INSTALL_OPTS='-s' install
endif
#
# install links to script drivers.
#
ifneq "$(SCRIPT_LINK)" ""
install ::
@if ( $(PERL) -e '$$fn="$(bindir)/$(SCRIPT_LINK)"; exit ((! -f $$fn || -l $$fn) ? 0 : 1);' ); then \
echo "Creating a symbol link from $(SCRIPT_PROG) to $(SCRIPT_LINK) in $(bindir)"; \
$(RM) $(bindir)/$(SCRIPT_LINK); \
$(LN_S) $(SCRIPT_PROG) $(bindir)/$(SCRIPT_LINK); \
else \
echo "Creating a symbol link from $(SCRIPT_PROG) to $(SCRIPT_LINK) in $(bindir) failed: \`$(bindir)/$(SCRIPT_LINK)' already exists"; \
echo "Perhaps remove \`$(bindir)/$(SCRIPT_LINK)' manually?"; \
exit 1; \
fi;
endif
endif
# -----------------------------------------------------------------------------
# Building source distributions
#
# Do it like this:
#
# $ make
# $ make dist Project=Ghc
#
# WARNING: `make dist' calls `make distclean' before tarring up the tree.
#
.PHONY: dist
SRC_DIST_DIR=$(shell pwd)/$(SRC_DIST_NAME)
ifneq "$(SUBDIRS)" ""
dist ::
# Don't rely on -e working, instead we check exit return codes from sub-makes.
echo $(SUBDIRS)
@case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
for i in $(SUBDIRS) ; do \
$(MKDIRHIER) $(SRC_DIST_DIR)/$$i; \
$(MAKE) -C $$i $(MFLAGS) $@ SRC_DIST_DIR=$(SRC_DIST_DIR)/$$i; \
if [ $$? -eq 0 ] ; then true; else exit $$x_on_err; fi; \
done
endif
# The default dist rule:
#
# copy/link the contents of $(SRC_DIST_FILES) into the
# shadow distribution tree. SRC_DIST_FILES contain the
# build-generated files that you want to include in
# a source distribution.
#
#
ifneq "$(SRC_DIST_FILES)" ""
dist::
@for i in $(SRC_DIST_FILES); do \
if ( echo "$$i" | grep "~" >/dev/null 2>&1 ); then \
echo $(LN_S) `pwd`/`echo $$i | sed -e "s/^\([^~]*\)~.*/\1/g"` $(SRC_DIST_DIR)/`echo $$i | sed -e "s/.*~\(.*\)/\1/g"` ; \
$(LN_S) `pwd`/`echo $$i | sed -e "s/^\([^~]*\)~.*/\1/g"` $(SRC_DIST_DIR)/`echo $$i | sed -e "s/.*~\(.*\)/\1/g"` ; \
else \
if (test -f "$$i"); then \
echo $(LN_S) `pwd`/$$i $(SRC_DIST_DIR)/$$i ; \
$(LN_S) `pwd`/$$i $(SRC_DIST_DIR)/$$i ; \
fi; \
fi; \
done;
endif
dist-package :: dist-package-tar-gz
dist-package-tar-gz ::
$(TAR) chzf $(SRC_DIST_NAME)-src.tar.gz $(SRC_DIST_NAME)
dist-package-zip ::
cd ..; $(ZIP) $(ZIP_OPTS) -r $(SRC_DIST_NAME)-src.zip $(SRC_DIST_DIR)