--- a/open-src/common/Makefile.inc Mon Mar 08 11:03:13 2010 -0800
+++ b/open-src/common/Makefile.inc Thu Mar 11 15:52:00 2010 -0800
@@ -54,6 +54,14 @@
SOURCE_DIRNAME_DEFAULT = $(SOURCE_DIRNAME_SET:yes=$(POUND_SIGN))
$(SOURCE_DIRNAME_DEFAULT) SOURCE_DIRNAME=$(MODULE_NAME)-$(MODULE_VERSION)
+BUILD_DIR_$(BUILD_TYPE) = build_$(BUILD_TYPE)
+# Special cases for 32-bit & 64-bit directory names to allow building
+# both architectures in the same tree (serially - building both in
+# parallel is likely to have race conditions)
+BUILD_DIR_32 = build-$(MACH32)
+BUILD_DIR_64 = build-$(MACH64)
+BUILD_DIR = $(BUILD_DIR_$(BUILD_TYPE))
+
SOURCE_DIR = $(BUILD_DIR)/$(SOURCE_DIRNAME)
SOURCE_DIR_32 = $(BUILD_DIR_32)/$(SOURCE_DIRNAME)
SOURCE_DIR_64 = $(BUILD_DIR_64)/$(SOURCE_DIRNAME)
@@ -75,10 +83,6 @@
GIT_URL_DEFAULT = $(GIT_URL_SET:yes=$(POUND_SIGN))
$(GIT_URL_DEFAULT) GIT_URL=$(XORG_GIT_URL)/$(SOURCE_TARBALL_DIR)/$(MODULE_NAME).git
-
-BUILD_DIR_32 = build_32
-BUILD_DIR_64 = build_64
-
# Set default build type to 32-bit if not set in module makefile
BUILD_TYPES_DEFAULT = $(BUILD_TYPES_SET:yes=$(POUND_SIGN))
$(BUILD_TYPES_DEFAULT) BUILD_TYPES=32
@@ -106,98 +110,74 @@
$(MODULE_ADD_INSTALL_TARGETS)
# Additional flags to pass to make in 32-bit & 64-bit builds
-BUILD_DIR_32_FLAGS= BUILD_DIR=$(BUILD_DIR_32) BUILD_TYPE=32
-
-BUILD_DIR_64_FLAGS= BUILD_DIR=$(BUILD_DIR_64) BUILD_TYPE=64 \
- LIBSUBDIR=/$(SUBDIR64) ARCHLIBSUBDIR=/$(SUBDIR64)
-
-BUILD_32_FLAGS= $(BUILD_DIR_32_FLAGS) ARCH_FLAGS="$(ARCH32_FLAGS)" \
+BUILD_32_FLAGS= ARCH_FLAGS="$(ARCH32_FLAGS)" \
$(MODTYPE_BUILD_32_FLAGS) $(MODULE_BUILD_32_FLAGS)
-BUILD_64_FLAGS= $(BUILD_DIR_64_FLAGS) ARCH_FLAGS="$(ARCH64_FLAGS)" \
+BUILD_64_FLAGS= ARCH_FLAGS="$(ARCH64_FLAGS)" \
$(MODTYPE_BUILD_64_FLAGS) $(MODULE_BUILD_64_FLAGS)
-all: $(BUILD_TYPES:%=source_%) $(BUILD_TYPES:%=build_%)
-all_32: source_32 configure_32 build_32
-all_64: source_64 configure_64 build_64
-
-clean: $(BUILD_TYPES:%=clean_%)
+all: $(BUILD_TYPES:%=build_%)
+all_%: build_%
-clean_32:
- -rm -rf $(BUILD_DIR_32)
+CLEAN_RULES = $(BUILD_TYPES:%=clean_%)
+clean: $(CLEAN_RULES)
+.PARALLEL: $(CLEAN_RULES)
-clean_64:
- -rm -rf $(BUILD_DIR_64)
+# Remove directories with both styles of naming
+$(CLEAN_RULES):
+ -rm -rf $(BUILD_DIR_$(@:clean_%=%)) $(@:clean_%=build_%)
# Tell dmake not to remove and create source in parallel
.NOPARALLEL: clean source
.NOPARALLEL: clean_$(BUILD_TYPE) source_$(BUILD_TYPE)
-source: $(BUILD_TYPES:%=source_%)
-
-source_gen: $(SOURCE_TARGETS)
+SOURCE_RULES = $(BUILD_TYPES:%=source_%)
+source: $(SOURCE_RULES)
+.PARALLEL: $(SOURCE_RULES)
-source_32: $(SOURCE_DIR_32)/$(UNPACK_FILE)
-$(SOURCE_DIR_32)/$(UNPACK_FILE):
- $(MAKE) $(MAKEFLAGS) $(BUILD_DIR_32_FLAGS) source_gen
+source-gen: $(SOURCE_TARGETS)
+
+$(SOURCE_RULES):
+ $(MAKE) $(MAKEFLAGS) BUILD_TYPE="$(@:source_%=%)" source-gen
-source_64: $(SOURCE_DIR_64)/$(UNPACK_FILE)
-$(SOURCE_DIR_64)/$(UNPACK_FILE):
- $(MAKE) $(MAKEFLAGS) $(BUILD_DIR_64_FLAGS) source_gen
+CONFIGURE_RULES = $(BUILD_TYPES:%=configure_%)
+configure: $(CONFIGURE_RULES)
+.PARALLEL: $(CONFIGURE_RULES)
-configure: $(BUILD_TYPES:%=configure_%)
+configure-gen: source-gen $(CONFIGURE_TARGETS)
-configure_gen: $(CONFIGURE_TARGETS)
-
-configure_32: source_32
- $(MAKE) $(MAKEFLAGS) $(BUILD_32_FLAGS) configure_gen
+$(CONFIGURE_RULES):
+ $(MAKE) $(MAKEFLAGS) BUILD_TYPE="$(@:configure_%=%)" \
+ $(BUILD_$(@:configure_%=%)_FLAGS) configure-gen
-configure_64: source_64
- $(MAKE) $(MAKEFLAGS) $(BUILD_64_FLAGS) configure_gen
-
-build: $(BUILD_TYPES:%=build_%)
+BUILD_RULES = $(BUILD_TYPES:%=build_%)
+build: $(BUILD_RULES)
+.PARALLEL: $(BUILD_RULES)
-build_gen: $(BUILD_TARGETS)
-
-build_32: configure_32
- $(MAKE) $(MAKEFLAGS) $(BUILD_32_FLAGS) build_gen
+build-gen: configure-gen $(BUILD_TARGETS)
-build_64: configure_64
- $(MAKE) $(MAKEFLAGS) $(BUILD_64_FLAGS) build_gen
-
-install: $(BUILD_TYPES:%=install_%)
+$(BUILD_RULES):
+ $(MAKE) $(MAKEFLAGS) BUILD_TYPE="$(@:build_%=%)" \
+ $(BUILD_$(@:build_%=%)_FLAGS) build-gen
-install_gen: $(INSTALL_TARGETS) install_license install_pkgconfig_uninstalled
+INSTALL_RULES = $(BUILD_TYPES:%=install_%)
+install: $(INSTALL_RULES)
-install_32: build_32
- $(MAKE) $(MAKEFLAGS) $(BUILD_32_FLAGS) install_gen
+install-gen: build-gen $(INSTALL_TARGETS) install_license install_pkgconfig_uninstalled
-install_64: build_64
- $(MAKE) $(MAKEFLAGS) $(BUILD_64_FLAGS) install_gen
+$(INSTALL_RULES):
+ $(MAKE) $(MAKEFLAGS) BUILD_TYPE="$(@:install_%=%)" \
+ $(BUILD_$(@:install_%=%)_FLAGS) install-gen
DEBUG_BUILD_FLAGS = BUILD_DEBUG=yes
-debug-build: debug
-debug-build_32: debug_32
-debug-build_64: debug_64
-
-debug:
- $(MAKE) $(MAKEFLAGS) all $(DEBUG_BUILD_FLAGS)
-
-debug_32:
- $(MAKE) $(MAKEFLAGS) all_32 $(DEBUG_BUILD_FLAGS)
+# Allow adding "debug-" prefix to rules like build_32, install, etc.
+debug-%:
+ $(MAKE) $(MAKEFLAGS) $(@:debug-%=%) $(DEBUG_BUILD_FLAGS)
-debug_64:
- $(MAKE) $(MAKEFLAGS) all_64 $(DEBUG_BUILD_FLAGS)
-
-debug-install:
- $(MAKE) $(MAKEFLAGS) install $(DEBUG_BUILD_FLAGS)
-
-debug-install_32:
- $(MAKE) $(MAKEFLAGS) install_32 $(DEBUG_BUILD_FLAGS)
-
-debug-install_64:
- $(MAKE) $(MAKEFLAGS) install $(DEBUG_BUILD_FLAGS)
+# Allow debug_XX to run "make all_XX" with debug flags (including without _XX)
+debug%:
+ $(MAKE) $(MAKEFLAGS) $(@:debug%=all%) $(DEBUG_BUILD_FLAGS)
### Source tarballs & downloading if necessary
@@ -309,7 +289,9 @@
SOURCE_DEPS = $(SOURCE_TARBALL) $(MODTYPE_SOURCE_DEPS) $(MODULE_SOURCE_DEPS)
-default_source: $(SOURCE_DEPS)
+default_source: $(UNPACK_TARGET)
+
+$(UNPACK_TARGET): $(SOURCE_DEPS)
mkdir -p $(BUILD_DIR)
@ if [[ "$(SOURCE_TARBALL_NAME)" != "NONE" ]] ; then \
if [[ "$(MODULE_VERSION)" = "git" ]] ; then \
@@ -334,9 +316,14 @@
if [[ "$(SOURCE_PATCHES)" != "" ]] ; then \
for p in $(SOURCE_PATCHES) x ; do \
if [[ "$$p" != "x" ]] ; then \
- PATCH_CMD="$$(print $$p | awk -F, '{if (NF > 1) FLAGS = $$2; else FLAGS="-p0" ; printf "gpatch -d $(SOURCE_DIR) %s < %s\n", FLAGS, $$1}')" ; \
- print "$${PATCH_CMD}" ; \
- eval $${PATCH_CMD} ; \
+ patch_file="$${p%,*}" ; \
+ if [[ "$$p" =~ "," ]] ; then \
+ patch_flags="$${p/*,}" ; \
+ else \
+ patch_flags="-p0" ; \
+ fi ; \
+ ($(START_CMD_ECHO) ; \
+ gpatch -d $(SOURCE_DIR) $${patch_flags} < "$${patch_file}" ) ; \
fi ; \
done ; \
fi ; \
@@ -369,7 +356,7 @@
AUTOMAKE="$(AUTOMAKE_PATH)"
# Dependencies for running configure to make a Makefile
-CONFIGURE_DEPS = $(UNPACK_TARGET) \
+CONFIGURE_DEPS = $(SOURCE_TARGETS) \
$(MODTYPE_CONFIGURE_DEPS) $(MODULE_CONFIGURE_DEPS)
# Command line options to GNU autoconf configure script
@@ -445,7 +432,10 @@
DEFAULT_BUILD_MAKEFLAGS=$(MODTYPE_MAKEFLAGS) $(MODULE_MAKEFLAGS) \
$(MODTYPE_BUILD_MAKEFLAGS) $(MODULE_BUILD_MAKEFLAGS)
-default_build: $(UNPACK_TARGET) $(CONFIGURE_TARGETS) $(MODTYPE_BUILD_DEPS) $(MODULE_BUILD_DEPS) $(MODULE_MAKE)
+# Dependencies for make build step
+BUILD_DEPS = $(SOURCE_TARGETS) $(CONFIGURE_TARGETS) $(MODTYPE_BUILD_DEPS) $(MODULE_BUILD_DEPS) $(MODULE_MAKE)
+
+default_build: $(BUILD_DEPS)
(cd $(SOURCE_DIR) ; \
$(BUILD_ENV) $(MODULE_MAKE) $(MAKEFLAGS) $(DEFAULT_BUILD_MAKEFLAGS))
@@ -542,7 +532,7 @@
$(XPROTO_DEP):
@print "$(XPROTO_DEP) not found..."
@print "Installing dependency proto/x11proto"
- (cd $(TOP)/proto/x11proto ; make install)
+ (cd $(TOP)/proto/x11proto ; $(MAKE) $(MAKEFLAGS) install)
### Useful rules for maintaining patch sets
@@ -552,19 +542,19 @@
regen-patches:
CUR_LIST=""
rm -rf tmp-regen
- make SOURCE_PATCHES="$(CUR_LIST)" BUILD_DIR=tmp-regen SUNTOUCHED_MANPAGES="" source_gen
+ $(MAKE) SOURCE_PATCHES="$(CUR_LIST)" BUILD_DIR=tmp-regen SUNTOUCHED_MANPAGES="" source-gen
mkdir -p new
for f in $(SOURCE_PATCHES) ; do \
- p=$$(print $$f | sed 's/,.*$$//') ; \
+ p=$${f%,*} ; \
print '=================' $$p ; \
rm -rf prev ; \
mv tmp-regen prev ; \
- $(MAKE) SOURCE_PATCHES="$${CUR_LIST} $$f" BUILD_DIR=tmp-regen SUNTOUCHED_MANPAGES="" source_gen ; \
+ $(MAKE) SOURCE_PATCHES="$${CUR_LIST} $$f" BUILD_DIR=tmp-regen SUNTOUCHED_MANPAGES="" source-gen ; \
awk '/^--- / {exit} \
/^diff -u/ {exit} \
{print}' $$p > new/$$p ; \
gdiff -urp -x '*~' -x '*.orig' ./prev ./tmp-regen \
- | sed -e 's% \./prev$(SOURCE_DIR)/% %' -e 's% \./tmp-regen$(SOURCE_DIR)/% %' \
+ | sed -e 's% \./prev/$(SOURCE_DIRNAME)/% %' -e 's% \./tmp-regen/$(SOURCE_DIRNAME)/% %' \
| grep -v '^Common subdirectories:' \
| grep -v '^Only in ' \
>> new/$$p ; \
@@ -572,14 +562,16 @@
done
rm -rf tmp-regen
+# Derive directory name relative to open-src
+THIS_MODULE:sh=echo ${PWD} | sed 's|.*/open-src/||'
+
# Allows running "make list-patches" to get a list of all patches we
# currently apply in our builds
list-patches:
- @THIS_MODULE=$$(print $(PWD) | sed 's|.*/open-src/||') ; \
- if [[ "$(SOURCE_PATCHES)" != "" ]] ; then \
+ @if [[ "$(SOURCE_PATCHES)" != "" ]] ; then \
for p in $(SOURCE_PATCHES) x ; do \
if [[ "$$p" != "x" ]] ; then \
- print "$${THIS_MODULE}/$$p" | sed 's/,-p[0-9]$$//' ; \
+ print "$(THIS_MODULE)/$${p%,*}" ; \
fi ; \
done ; \
fi
@@ -591,25 +583,24 @@
# and set LICENSE_FILE_SET=yes
# A file in the same directory as the Makefile takes precedence
# over one that is delivered in the package.
-# For additional license files, set EXTRA_LICENSE_FILES to a list of
-# licenses to copy
LICENSE_FILE_DEFAULT = $(LICENSE_FILE_SET:yes=$(POUND_SIGN))
$(LICENSE_FILE_DEFAULT) LICENSE_FILE=COPYING
-install_license:
- @ THIS_MODULE="$$(echo $(PWD) | sed 's|.*/open-src/||')" ; \
- $(START_CMD_ECHO) ; \
+MODULE_LICENSE_DESTDIR = $(LICENSE_DEST)/$(THIS_MODULE)
+
+install_license: $(MODULE_LICENSE_DESTDIR)/COPYING
+
+$(MODULE_LICENSE_DESTDIR):
+ mkdir -p $@
+
+$(MODULE_LICENSE_DESTDIR)/COPYING: $(MODULE_LICENSE_DESTDIR) $(SOURCE_TARGETS)
+ @ $(START_CMD_ECHO) ; \
if [[ -f $(LICENSE_FILE) ]] ; then \
LICENSE_TO_COPY="$(LICENSE_FILE)" ; \
elif [[ -f $(SOURCE_DIR)/$(LICENSE_FILE) ]] ; then \
LICENSE_TO_COPY="$(SOURCE_DIR)/$(LICENSE_FILE)" ; \
fi ; \
if [[ "$${LICENSE_TO_COPY}" != "" ]] ; then \
- mkdir -p $(LICENSE_DEST)/$${THIS_MODULE}/ ; \
- cp -pf $${LICENSE_TO_COPY} \
- $(LICENSE_DEST)/$${THIS_MODULE}/COPYING ; \
- fi ; \
- if [[ "$(EXTRA_LICENSES)" != "" ]] ; then \
- mkdir -p $(LICENSE_DEST)/$${THIS_MODULE}/ ; \
- cp -pf $(EXTRA_LICENSES) $(LICENSE_DEST)/$${THIS_MODULE} ; \
+ rm -f $@ ; \
+ cp -pf $${LICENSE_TO_COPY} $@ ; \
fi