You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
317 lines
11 KiB
317 lines
11 KiB
15 years ago
|
#-*- mode: Fundamental; tab-width: 4; -*-
|
||
|
# ex:ts=4
|
||
|
# $Id$
|
||
|
|
||
|
# Copyright (C) 2001 Nick Moffitt
|
||
|
#
|
||
|
# Redistribution and/or use, with or without modification, is
|
||
|
# permitted. This software is without warranty of any kind. The
|
||
|
# author(s) shall not be liable in the event that use of the
|
||
|
# software causes damage.
|
||
|
|
||
|
|
||
|
# Comment this out to make much verbosity
|
||
|
#.SILENT:
|
||
|
|
||
|
|
||
|
#ifeq ($(origin GARDIR), undefined)
|
||
|
#GARDIR := $(CURDIR)/../..
|
||
|
#endif
|
||
|
|
||
|
GARDIR ?= ../..
|
||
|
FILEDIR ?= files
|
||
|
DOWNLOADDIR ?= download
|
||
|
COOKIEDIR ?= cookies
|
||
|
WORKDIR ?= work
|
||
|
WORKSRC ?= $(WORKDIR)/$(DISTNAME)
|
||
|
EXTRACTDIR ?= $(WORKDIR)
|
||
|
SCRATCHDIR ?= tmp
|
||
|
CHECKSUM_FILE ?= checksums
|
||
|
MANIFEST_FILE ?= manifest
|
||
|
|
||
|
DIRSTODOTS = $(subst . /,./,$(patsubst %,/..,$(subst /, ,/$(1))))
|
||
|
ROOTFROMDEST = $(call DIRSTODOTS,$(DESTDIR))
|
||
|
|
||
|
DISTNAME ?= $(GARNAME)-$(GARVERSION)
|
||
|
|
||
|
|
||
|
ALLFILES ?= $(DISTFILES) $(PATCHFILES)
|
||
|
|
||
|
INSTALL_DIRS = $(addprefix $(DESTDIR),$(BUILD_PREFIX) $(prefix) $(exec_prefix) $(bindir) $(sbindir) $(libexecdir) $(datadir) $(sysconfdir) $(sharedstatedir) $(localstatedir) $(libdir) $(infodir) $(lispdir) $(includedir) $(mandir) $(foreach NUM,1 2 3 4 5 6 7 8, $(mandir)/man$(NUM)) $(sourcedir))
|
||
|
|
||
|
# These are bad, since exporting them mucks up the dep rules!
|
||
|
# WORKSRC is added in manually for the manifest rule.
|
||
|
#export GARDIR FILEDIR DOWNLOADDIR COOKIEDIR WORKDIR WORKSRC EXTRACTDIR
|
||
|
#export SCRATCHDIR CHECKSUM_FILE MANIFEST_FILE
|
||
|
|
||
|
# For rules that do nothing, display what dependencies they
|
||
|
# successfully completed
|
||
|
DONADA = @echo " [$(call TMSG_ACTION,$@)] complete for $(call TMSG_ID,$(GARNAME))."
|
||
|
|
||
|
# TODO: write a stub rule to print out the name of a rule when it
|
||
|
# *does* do something, and handle indentation intelligently.
|
||
|
|
||
|
# Default sequence for "all" is: fetch checksum extract patch configure build
|
||
|
all: build
|
||
|
$(DONADA)
|
||
|
|
||
|
|
||
|
# include the configuration file to override any of these variables
|
||
|
include $(GARDIR)/kde.conf.mk
|
||
|
include $(GARDIR)/gar.conf.mk
|
||
|
include $(GARDIR)/gar.lib.mk
|
||
|
include $(GARDIR)/color.mk
|
||
|
|
||
|
ifdef BUILD_CLEAN
|
||
|
DO_BUILD_CLEAN = buildclean
|
||
|
else
|
||
|
DO_BUILD_CLEAN =
|
||
|
endif
|
||
|
|
||
|
# some packages use DESTDIR, but some use other methods. For the
|
||
|
# rules that *we* write, the DESTDIR will be transparently added.
|
||
|
# These need to happen after gar.conf.mk, as they use the := to
|
||
|
# set the vars.
|
||
|
# NOTE: removed due to
|
||
|
# http://gar.lnx-bbc.org/wiki/ImplicitDestdirConsideredHarmful
|
||
|
#%-install: prefix := $(DESTDIR)$(prefix)
|
||
|
#install-none: prefix := $(DESTDIR)$(prefix)
|
||
|
|
||
|
#################### DIRECTORY MAKERS ####################
|
||
|
|
||
|
# This is to make dirs as needed by the base rules
|
||
|
$(sort $(DOWNLOADDIR) $(COOKIEDIR) $(WORKSRC) $(WORKDIR) $(EXTRACTDIR) $(FILEDIR) $(SCRATCHDIR) $(INSTALL_DIRS)) $(COOKIEDIR)/%:
|
||
|
@if test -d $@; then : ; else \
|
||
|
install -d $@; \
|
||
|
echo "install -d $@"; \
|
||
|
fi
|
||
|
|
||
|
# These stubs are wildcarded, so that the port maintainer can
|
||
|
# define something like "pre-configure" and it won't conflict,
|
||
|
# while the configure target can call "pre-configure" safely even
|
||
|
# if the port maintainer hasn't defined it.
|
||
|
#
|
||
|
# in addition to the pre-<target> rules, the maintainer may wish
|
||
|
# to set a "pre-everything" rule, which runs before the first
|
||
|
# actual target.
|
||
|
pre-%:
|
||
|
@true
|
||
|
|
||
|
post-%:
|
||
|
@true
|
||
|
|
||
|
# Call any arbitrary rule recursively
|
||
|
deep-%: %
|
||
|
@for i in $(LIBDEPS) $(DEPENDS) $(BUILDDEPS); do \
|
||
|
$(MAKE) -C $(GARDIR)/$$i $@; \
|
||
|
done
|
||
|
|
||
|
# ========================= MAIN RULES =========================
|
||
|
# The main rules are the ones that the user can specify as a
|
||
|
# target on the "make" command-line. Currently, they are:
|
||
|
# fetch-list fetch checksum makesum extract checkpatch patch
|
||
|
# build install reinstall uninstall package
|
||
|
# (some may not be complete yet).
|
||
|
#
|
||
|
# Each of these rules has dependencies that run in the following
|
||
|
# order:
|
||
|
# - run the previous main rule in the chain (e.g., install
|
||
|
# depends on build)
|
||
|
# - run the pre- rule for the target (e.g., configure would
|
||
|
# then run pre-configure)
|
||
|
# - generate a set of files to depend on. These are typically
|
||
|
# cookie files in $(COOKIEDIR), but in the case of fetch are
|
||
|
# actual downloaded files in $(DOWNLOADDIR)
|
||
|
# - run the post- rule for the target
|
||
|
#
|
||
|
# The main rules also run the $(DONADA) code, which prints out
|
||
|
# what just happened when all the dependencies are finished.
|
||
|
|
||
|
announce:
|
||
|
@echo "[$(call TMSG_BRIGHT,=====) $(call TMSG_ACTION,NOW BUILDING): $(call TMSG_ID,$(DISTNAME)) $(call TMSG_BRIGHT,=====)]"
|
||
|
|
||
|
# fetch-list - Show list of files that would be retrieved by fetch.
|
||
|
# NOTE: DOES NOT RUN pre-everything!
|
||
|
fetch-list:
|
||
|
@echo "Distribution files: "
|
||
|
@for i in $(DISTFILES); do echo " $$i"; done
|
||
|
@echo "Patch files: "
|
||
|
@for i in $(PATCHFILES); do echo " $$i"; done
|
||
|
|
||
|
# showdeps - Show dependencies in a tree-structure
|
||
|
showdeps:
|
||
|
@for i in $(LIBDEPS) $(BUILDDEPS); do \
|
||
|
echo -e "$(TABLEVEL)$$i";\
|
||
|
$(MAKE) -s -C $(GARDIR)/$$i TABLEVEL="$(TABLEVEL)\t" showdeps;\
|
||
|
done
|
||
|
|
||
|
# fetch - Retrieves $(DISTFILES) (and $(PATCHFILES) if defined)
|
||
|
# into $(DOWNLOADDIR) as necessary.
|
||
|
FETCH_TARGETS = $(addprefix $(DOWNLOADDIR)/,$(ALLFILES))
|
||
|
|
||
|
fetch: announce pre-everything $(DOWNLOADDIR) $(addprefix dep-$(GARDIR)/,$(FETCHDEPS)) pre-fetch $(FETCH_TARGETS) post-fetch
|
||
|
$(DONADA)
|
||
|
|
||
|
# returns true if fetch has completed successfully, false
|
||
|
# otherwise
|
||
|
fetch-p:
|
||
|
@$(foreach COOKIEFILE,$(FETCH_TARGETS), test -e $(COOKIEFILE) ;)
|
||
|
|
||
|
# checksum - Use $(CHECKSUMFILE) to ensure that your
|
||
|
# distfiles are valid.
|
||
|
CHECKSUM_TARGETS = $(addprefix checksum-,$(filter-out $(NOCHECKSUM),$(ALLFILES)))
|
||
|
|
||
|
checksum: fetch $(COOKIEDIR) pre-checksum $(CHECKSUM_TARGETS) post-checksum
|
||
|
$(DONADA)
|
||
|
|
||
|
# returns true if checksum has completed successfully, false
|
||
|
# otherwise
|
||
|
checksum-p:
|
||
|
@$(foreach COOKIEFILE,$(CHECKSUM_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
|
||
|
|
||
|
# makesum - Generate distinfo (only do this for your own ports!).
|
||
|
MAKESUM_TARGETS = $(addprefix $(DOWNLOADDIR)/,$(filter-out $(NOCHECKSUM),$(ALLFILES)))
|
||
|
|
||
|
makesum: fetch $(MAKESUM_TARGETS)
|
||
|
@if test "x$(MAKESUM_TARGETS)" != "x "; then \
|
||
|
$(MD5) $(MAKESUM_TARGETS) > $(CHECKSUM_FILE) ; \
|
||
|
echo "Checksums complete for $(call TMSG_ID,$(MAKESUM_TARGETS))" ; \
|
||
|
fi
|
||
|
|
||
|
# I am always typing this by mistake
|
||
|
makesums: makesum
|
||
|
|
||
|
garchive: checksum
|
||
|
mkdir -p $(GARCHIVEDIR)
|
||
|
cp -Lr $(DOWNLOADDIR)/* $(GARCHIVEDIR) || true
|
||
|
|
||
|
# extract - Unpacks $(DISTFILES) into $(EXTRACTDIR) (patches are "zcatted" into the patch program)
|
||
|
EXTRACT_TARGETS = $(addprefix extract-,$(filter-out $(NOEXTRACT),$(DISTFILES)))
|
||
|
|
||
|
extract: checksum $(EXTRACTDIR) $(COOKIEDIR) $(addprefix dep-$(GARDIR)/,$(EXTRACTDEPS)) pre-extract $(EXTRACT_TARGETS) post-extract
|
||
|
$(DONADA)
|
||
|
|
||
|
# returns true if extract has completed successfully, false
|
||
|
# otherwise
|
||
|
extract-p:
|
||
|
@$(foreach COOKIEFILE,$(EXTRACT_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
|
||
|
|
||
|
# checkpatch - Do a "patch -C" instead of a "patch". Note
|
||
|
# that it may give incorrect results if multiple
|
||
|
# patches deal with the same file.
|
||
|
# TODO: actually write it!
|
||
|
checkpatch: extract
|
||
|
@echo "$(call TMSG_FAIL,$@) NOT IMPLEMENTED YET"
|
||
|
|
||
|
# patch - Apply any provided patches to the source.
|
||
|
PATCH_TARGETS = $(addprefix patch-,$(PATCHFILES))
|
||
|
|
||
|
patch: extract $(WORKSRC) pre-patch $(PATCH_TARGETS) post-patch
|
||
|
$(DONADA)
|
||
|
|
||
|
# returns true if patch has completed successfully, false
|
||
|
# otherwise
|
||
|
patch-p:
|
||
|
@$(foreach COOKIEFILE,$(PATCH_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
|
||
|
|
||
|
# makepatch - Grab the upstream source and diff against $(WORKSRC). Since
|
||
|
# diff returns 1 if there are differences, we remove the patch
|
||
|
# file on "success". Goofy diff.
|
||
|
makepatch: $(SCRATCHDIR) $(FILEDIR) $(FILEDIR)/gar-base.diff
|
||
|
$(DONADA)
|
||
|
|
||
|
# this takes the changes you've made to a working directory,
|
||
|
# distills them to a patch, updates the checksum file, and tries
|
||
|
# out the build (assuming you've listed the gar-base.diff in your
|
||
|
# PATCHFILES). This is way undocumented. -NickM
|
||
|
beaujolais: makepatch makesum clean build
|
||
|
$(DONADA)
|
||
|
|
||
|
# configure - Runs either GNU configure, one or more local
|
||
|
# configure scripts or nothing, depending on
|
||
|
# what's available.
|
||
|
CONFIGURE_TARGETS = $(addprefix configure-,$(CONFIGURE_SCRIPTS))
|
||
|
LIBDEPS += $(DEPENDS)
|
||
|
|
||
|
configure: patch $(addprefix builddep-$(GARDIR)/,$(BUILDDEPS)) $(addprefix dep-$(GARDIR)/,$(LIBDEPS)) $(addprefix srcdep-$(GARDIR)/,$(SOURCEDEPS)) pre-configure $(CONFIGURE_TARGETS) post-configure
|
||
|
$(DONADA)
|
||
|
|
||
|
# returns true if configure has completed successfully, false
|
||
|
# otherwise
|
||
|
configure-p:
|
||
|
@$(foreach COOKIEFILE,$(CONFIGURE_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
|
||
|
|
||
|
# build - Actually compile the sources.
|
||
|
BUILD_TARGETS = $(addprefix build-,$(BUILD_SCRIPTS))
|
||
|
|
||
|
build: configure pre-build $(BUILD_TARGETS) post-build
|
||
|
$(DONADA)
|
||
|
|
||
|
# returns true if build has completed successfully, false
|
||
|
# otherwise
|
||
|
build-p:
|
||
|
@$(foreach COOKIEFILE,$(BUILD_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
|
||
|
|
||
|
# strip - Strip binaries
|
||
|
strip: build pre-strip $(addprefix strip-,$(STRIP_SCRIPTS)) post-strip
|
||
|
@echo "$(call TMSG_FAIL,$@) NOT IMPLEMENTED YET"
|
||
|
|
||
|
# install - Install the results of a build.
|
||
|
INSTALL_TARGETS = $(addprefix install-,$(INSTALL_SCRIPTS))
|
||
|
|
||
|
install: build $(addprefix dep-$(GARDIR)/,$(INSTALLDEPS)) $(INSTALL_DIRS) pre-install $(INSTALL_TARGETS) post-install $(DO_BUILD_CLEAN)
|
||
|
$(DONADA)
|
||
|
|
||
|
# returns true if install has completed successfully, false
|
||
|
# otherwise
|
||
|
install-p:
|
||
|
@$(foreach COOKIEFILE,$(INSTALL_TARGETS), test -e $(COOKIEDIR)/$(COOKIEFILE) ;)
|
||
|
|
||
|
# installstrip - Install the results of a build, stripping first.
|
||
|
installstrip: strip pre-install $(INSTALL_TARGETS) post-install
|
||
|
$(DONADA)
|
||
|
|
||
|
# reinstall - Install the results of a build, ignoring
|
||
|
# "already installed" flag.
|
||
|
# TODO: actually write it!
|
||
|
reinstall: build
|
||
|
rm -rf $(COOKIEDIR)/install*
|
||
|
$(MAKE) install
|
||
|
|
||
|
# uninstall - Remove the installation.
|
||
|
# TODO: actually write it!
|
||
|
uninstall: build
|
||
|
@echo "$(call TMSG_FAIL,$@) NOT IMPLEMENTED YET"
|
||
|
|
||
|
|
||
|
# package - Create a package from an _installed_ port.
|
||
|
# TODO: actually write it!
|
||
|
package: build
|
||
|
@echo "$(call TMSG_FAIL,$@) NOT IMPLEMENTED YET"
|
||
|
|
||
|
# tarball - Make a tarball from an install of the package into a scratch dir
|
||
|
tarball: build
|
||
|
rm -rf $(COOKIEDIR)/install*
|
||
|
$(MAKE) DESTDIR=$(CURDIR)/$(SCRATCHDIR) BUILD_PREFIX=$(call DIRSTODOTS,$(CURDIR)/$(SCRATCHDIR))/$(BUILD_PREFIX) install
|
||
|
find $(SCRATCHDIR) -depth -type d | while read i; do rmdir $$i > /dev/null 2>&1 || true; done
|
||
|
$(TAR) czvf $(CURDIR)/$(WORKDIR)/$(DISTNAME)-install.tar.gz -C $(SCRATCHDIR) .
|
||
|
$(MAKECOOKIE)
|
||
|
|
||
|
|
||
|
# The clean rule. It must be run if you want to re-download a
|
||
|
# file after a successful checksum (or just remove the checksum
|
||
|
# cookie, but that would be lame and unportable).
|
||
|
clean:
|
||
|
@rm -rf $(DOWNLOADDIR) $(COOKIEDIR) $(COOKIEDIR)-* $(WORKSRC) $(WORKDIR) $(EXTRACTDIR) $(SCRATCHDIR) $(SCRATCHDIR)-$(COOKIEDIR) $(SCRATCHDIR)-build *~
|
||
|
|
||
|
buildclean:
|
||
|
@rm -rf $(WORKSRC) $(WORKDIR) $(EXTRACTDIR) $(SCRATCHDIR) $(SCRATCHDIR)-$(COOKIEDIR) $(SCRATCHDIR)-build *~
|
||
|
|
||
|
# these targets do not have actual corresponding files
|
||
|
.PHONY: all fetch-list fetch checksum makesum extract checkpatch patch makepatch configure build install clean buildclean beaujolais strip fetch-p checksum-p extract-p patch-p configure-p build-p install-p
|
||
|
|
||
|
# apparently this makes all previous rules non-parallelizable,
|
||
|
# but the actual builds of the packages will be, according to
|
||
|
# jdub.
|
||
|
.NOTPARALLEL:
|