From c796f89dbc3e61845d1e44d117acc471f583c417 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 24 Mar 2014 12:03:47 -0700 Subject: [PATCH] mk: Fix prepare.mk The way it was formulated you could only 'prepare' one directory per build. --- mk/dist.mk | 14 ++++-- mk/prepare.mk | 124 +++++++++++++++++++++++++------------------------- 2 files changed, 74 insertions(+), 64 deletions(-) diff --git a/mk/dist.mk b/mk/dist.mk index 801a843a917a..9dd54e3ebe2e 100644 --- a/mk/dist.mk +++ b/mk/dist.mk @@ -123,6 +123,8 @@ $(PKG_EXE): rust.iss modpath.iss LICENSE.txt rust-logo.ico \ @$(call E, ISCC: $@) $(Q)"$(CFG_ISCC)" $< +$(eval $(call DEF_PREPARE,win)) + dist-prepare-win: PREPARE_HOST=$(CFG_BUILD) dist-prepare-win: PREPARE_TARGETS=$(CFG_BUILD) dist-prepare-win: PREPARE_DEST_DIR=tmp/dist/win @@ -131,7 +133,7 @@ dist-prepare-win: PREPARE_BIN_CMD=$(DEFAULT_PREPARE_BIN_CMD) dist-prepare-win: PREPARE_LIB_CMD=$(DEFAULT_PREPARE_LIB_CMD) dist-prepare-win: PREPARE_MAN_CMD=$(DEFAULT_PREPARE_MAN_CMD) dist-prepare-win: PREPARE_CLEAN=true -dist-prepare-win: prepare-base +dist-prepare-win: prepare-base-win endif @@ -146,6 +148,9 @@ distcheck-win: dist-win ifeq ($(CFG_OSTYPE), apple-darwin) define DEF_OSX_PKG + +$$(eval $$(call DEF_PREPARE,osx-$(1))) + dist-prepare-osx-$(1): PREPARE_HOST=$(1) dist-prepare-osx-$(1): PREPARE_TARGETS=$(1) dist-prepare-osx-$(1): PREPARE_DEST_DIR=tmp/dist/pkgroot-$(1) @@ -153,7 +158,7 @@ dist-prepare-osx-$(1): PREPARE_DIR_CMD=$(DEFAULT_PREPARE_DIR_CMD) dist-prepare-osx-$(1): PREPARE_BIN_CMD=$(DEFAULT_PREPARE_BIN_CMD) dist-prepare-osx-$(1): PREPARE_LIB_CMD=$(DEFAULT_PREPARE_LIB_CMD) dist-prepare-osx-$(1): PREPARE_MAN_CMD=$(DEFAULT_PREPARE_MAN_CMD) -dist-prepare-osx-$(1): prepare-base +dist-prepare-osx-$(1): prepare-base-osx-$(1) dist/$(PKG_NAME)-$(1).pkg: $(S)src/etc/pkg/Distribution.xml LICENSE.txt dist-prepare-osx-$(1) @$$(call E, making OS X pkg) @@ -182,6 +187,9 @@ distcheck-osx: dist-osx ###################################################################### define DEF_INSTALLER + +$$(eval $$(call DEF_PREPARE,dir-$(1))) + dist-install-dir-$(1): PREPARE_HOST=$(1) dist-install-dir-$(1): PREPARE_TARGETS=$(1) dist-install-dir-$(1): PREPARE_DEST_DIR=tmp/dist/$$(PKG_NAME)-$(1) @@ -190,7 +198,7 @@ dist-install-dir-$(1): PREPARE_BIN_CMD=$(DEFAULT_PREPARE_BIN_CMD) dist-install-dir-$(1): PREPARE_LIB_CMD=$(DEFAULT_PREPARE_LIB_CMD) dist-install-dir-$(1): PREPARE_MAN_CMD=$(DEFAULT_PREPARE_MAN_CMD) dist-install-dir-$(1): PREPARE_CLEAN=true -dist-install-dir-$(1): prepare-base +dist-install-dir-$(1): prepare-base-dir-$(1) $$(Q)(cd $$(PREPARE_DEST_DIR)/ && find -type f) \ > $$(PREPARE_DEST_DIR)/$$(CFG_LIBDIR_RELATIVE)/$$(CFG_RUSTLIBDIR)/manifest $$(Q)$$(PREPARE_MAN_CMD) $$(S)COPYRIGHT $$(PREPARE_DEST_DIR) diff --git a/mk/prepare.mk b/mk/prepare.mk index ebadbb9db883..a4197fdb0450 100644 --- a/mk/prepare.mk +++ b/mk/prepare.mk @@ -28,23 +28,6 @@ else PREPARE_STAGE=2 endif -prepare: PREPARE_DIR_CMD=$(DEFAULT_PREPARE_DIR_CMD) -prepare: PREPARE_BIN_CMD=$(DEFAULT_PREPARE_BIN_CMD) -prepare: PREPARE_LIB_CMD=$(DEFAULT_PREPARE_LIB_CMD) -prepare: PREPARE_MAN_CMD=$(DEFAULT_PREPARE_MAN_CMD) -prepare: prepare-base - -prepare-base: PREPARE_SOURCE_DIR=$(PREPARE_HOST)/stage$(PREPARE_STAGE) -prepare-base: PREPARE_SOURCE_BIN_DIR=$(PREPARE_SOURCE_DIR)/bin -prepare-base: PREPARE_SOURCE_LIB_DIR=$(PREPARE_SOURCE_DIR)/$(CFG_LIBDIR_RELATIVE) -prepare-base: PREPARE_SOURCE_MAN_DIR=$(S)/man -prepare-base: PREPARE_DEST_BIN_DIR=$(PREPARE_DEST_DIR)/bin -prepare-base: PREPARE_DEST_LIB_DIR=$(PREPARE_DEST_DIR)/$(CFG_LIBDIR_RELATIVE) -prepare-base: PREPARE_DEST_MAN_DIR=$(PREPARE_DEST_DIR)/share/man/man1 -prepare-base: prepare-host prepare-targets - -prepare-everything: prepare-host prepare-targets - DEFAULT_PREPARE_DIR_CMD = umask 022 && mkdir -p DEFAULT_PREPARE_BIN_CMD = install -m755 DEFAULT_PREPARE_LIB_CMD = install -m644 @@ -93,29 +76,17 @@ define PREPARE_MAN $(Q)$(PREPARE_MAN_CMD) $(PREPARE_SOURCE_MAN_DIR)/$(1) $(PREPARE_DEST_MAN_DIR)/$(1) endef - PREPARE_TOOLS = $(filter-out compiletest, $(TOOLS)) -prepare-host: prepare-host-tools - -prepare-host-tools: \ - $(foreach tool, $(PREPARE_TOOLS),\ - $(foreach host,$(CFG_HOST),\ - prepare-host-tool-$(tool)-$(PREPARE_STAGE)-$(host))) - -prepare-host-dirs: prepare-maybe-clean - $(call PREPARE_DIR,$(PREPARE_DEST_BIN_DIR)) - $(call PREPARE_DIR,$(PREPARE_DEST_LIB_DIR)) - $(call PREPARE_DIR,$(PREPARE_DEST_MAN_DIR)) # $(1) is tool # $(2) is stage # $(3) is host +# $(4) tag define DEF_PREPARE_HOST_TOOL -prepare-host-tool-$(1)-$(2)-$(3): prepare-maybe-clean \ - $$(foreach dep,$$(TOOL_DEPS_$(1)),prepare-host-lib-$$(dep)-$(2)-$(3)) \ - $$(HBIN$(2)_H_$(3))/$(1)$$(X_$(3)) \ - prepare-host-dirs +prepare-host-tool-$(1)-$(2)-$(3)-$(4): prepare-maybe-clean-$(4) \ + $$(foreach dep,$$(TOOL_DEPS_$(1)),prepare-host-lib-$$(dep)-$(2)-$(3)-$(4)) \ + prepare-host-dirs-$(4) $$(if $$(findstring $(2), $$(PREPARE_STAGE)),\ $$(if $$(findstring $(3), $$(PREPARE_HOST)),\ $$(call PREPARE_BIN,$(1)$$(X_$$(PREPARE_HOST))),),) @@ -124,45 +95,35 @@ prepare-host-tool-$(1)-$(2)-$(3): prepare-maybe-clean \ $$(call PREPARE_MAN,$(1).1),),) endef -$(foreach tool,$(PREPARE_TOOLS),\ - $(foreach host,$(CFG_HOST),\ - $(eval $(call DEF_PREPARE_HOST_TOOL,$(tool),$(PREPARE_STAGE),$(host))))) - # For host libraries only install dylibs, not rlibs since the host libs are only # used to support rustc and rustc uses dynamic linking # # $(1) is tool # $(2) is stage # $(3) is host +# $(4) tag define DEF_PREPARE_HOST_LIB -prepare-host-lib-$(1)-$(2)-$(3): PREPARE_WORKING_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_LIB_DIR) -prepare-host-lib-$(1)-$(2)-$(3): PREPARE_WORKING_DEST_LIB_DIR=$$(PREPARE_DEST_LIB_DIR) -prepare-host-lib-$(1)-$(2)-$(3): prepare-maybe-clean \ - $$(foreach dep,$$(RUST_DEPS_$(1)),prepare-host-lib-$$(dep)-$(2)-$(3))\ +prepare-host-lib-$(1)-$(2)-$(3)-$(4): PREPARE_WORKING_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_LIB_DIR) +prepare-host-lib-$(1)-$(2)-$(3)-$(4): PREPARE_WORKING_DEST_LIB_DIR=$$(PREPARE_DEST_LIB_DIR) +prepare-host-lib-$(1)-$(2)-$(3)-$(4): prepare-maybe-clean-$(4) \ + $$(foreach dep,$$(RUST_DEPS_$(1)),prepare-host-lib-$$(dep)-$(2)-$(3)-$(4))\ $$(HLIB$(2)_H_$(3))/stamp.$(1) \ - prepare-host-dirs + prepare-host-dirs-$(4) $$(if $$(findstring $(2), $$(PREPARE_STAGE)),\ $$(if $$(findstring $(3), $$(PREPARE_HOST)),\ $$(call PREPARE_LIB,$$(call CFG_LIB_GLOB_$$(PREPARE_HOST),$(1))),),) endef -$(foreach lib,$(CRATES),\ - $(foreach host,$(CFG_HOST),\ - $(eval $(call DEF_PREPARE_HOST_LIB,$(lib),$(PREPARE_STAGE),$(host))))) - -prepare-targets:\ - $(foreach host,$(CFG_HOST),\ - $(foreach target,$(CFG_TARGET),\ - prepare-target-$(target)-host-$(host)-$(PREPARE_STAGE))) # $(1) is stage # $(2) is target # $(3) is host +# $(4) tag define DEF_PREPARE_TARGET_N # Rebind PREPARE_*_LIB_DIR to point to rustlib, then install the libs for the targets -prepare-target-$(2)-host-$(3)-$(1): PREPARE_WORKING_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_LIB_DIR)/$$(CFG_RUSTLIBDIR)/$(2)/lib -prepare-target-$(2)-host-$(3)-$(1): PREPARE_WORKING_DEST_LIB_DIR=$$(PREPARE_DEST_LIB_DIR)/$$(CFG_RUSTLIBDIR)/$(2)/lib -prepare-target-$(2)-host-$(3)-$(1): prepare-maybe-clean \ +prepare-target-$(2)-host-$(3)-$(1)-$(4): PREPARE_WORKING_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_LIB_DIR)/$$(CFG_RUSTLIBDIR)/$(2)/lib +prepare-target-$(2)-host-$(3)-$(1)-$(4): PREPARE_WORKING_DEST_LIB_DIR=$$(PREPARE_DEST_LIB_DIR)/$$(CFG_RUSTLIBDIR)/$(2)/lib +prepare-target-$(2)-host-$(3)-$(1)-$(4): prepare-maybe-clean-$(4) \ $$(foreach crate,$$(TARGET_CRATES), \ $$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(crate)) \ $$(if $$(findstring $(2),$$(CFG_HOST)), \ @@ -186,12 +147,53 @@ prepare-target-$(2)-host-$(3)-$(1): prepare-maybe-clean \ $$(call PREPARE_LIB,libcompiler-rt.a),),),) endef -$(foreach host,$(CFG_HOST),\ - $(foreach target,$(CFG_TARGET), \ - $(eval $(call DEF_PREPARE_TARGET_N,$(PREPARE_STAGE),$(target),$(host))))) +define DEF_PREPARE + +prepare-base-$(1): PREPARE_SOURCE_DIR=$$(PREPARE_HOST)/stage$$(PREPARE_STAGE) +prepare-base-$(1): PREPARE_SOURCE_BIN_DIR=$$(PREPARE_SOURCE_DIR)/bin +prepare-base-$(1): PREPARE_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_DIR)/$$(CFG_LIBDIR_RELATIVE) +prepare-base-$(1): PREPARE_SOURCE_MAN_DIR=$$(S)/man +prepare-base-$(1): PREPARE_DEST_BIN_DIR=$$(PREPARE_DEST_DIR)/bin +prepare-base-$(1): PREPARE_DEST_LIB_DIR=$$(PREPARE_DEST_DIR)/$$(CFG_LIBDIR_RELATIVE) +prepare-base-$(1): PREPARE_DEST_MAN_DIR=$$(PREPARE_DEST_DIR)/share/man/man1 +prepare-base-$(1): prepare-host-$(1) prepare-targets-$(1) + +prepare-host-$(1): prepare-host-tools-$(1) + +prepare-host-tools-$(1): \ + $$(foreach tool, $$(PREPARE_TOOLS),\ + $$(foreach host,$$(CFG_HOST),\ + prepare-host-tool-$$(tool)-$$(PREPARE_STAGE)-$$(host)-$(1))) + +prepare-host-dirs-$(1): prepare-maybe-clean-$(1) + $$(call PREPARE_DIR,$$(PREPARE_DEST_BIN_DIR)) + $$(call PREPARE_DIR,$$(PREPARE_DEST_LIB_DIR)) + $$(call PREPARE_DIR,$$(PREPARE_DEST_MAN_DIR)) + +$$(foreach tool,$$(PREPARE_TOOLS),\ + $$(foreach host,$$(CFG_HOST),\ + $$(eval $$(call DEF_PREPARE_HOST_TOOL,$$(tool),$$(PREPARE_STAGE),$$(host),$(1))))) + +$$(foreach lib,$$(CRATES),\ + $$(foreach host,$$(CFG_HOST),\ + $$(eval $$(call DEF_PREPARE_HOST_LIB,$$(lib),$$(PREPARE_STAGE),$$(host),$(1))))) + +prepare-targets-$(1):\ + $$(foreach host,$$(CFG_HOST),\ + $$(foreach target,$$(CFG_TARGET),\ + prepare-target-$$(target)-host-$$(host)-$$(PREPARE_STAGE)-$(1))) + +$$(foreach host,$$(CFG_HOST),\ + $$(foreach target,$$(CFG_TARGET), \ + $$(eval $$(call DEF_PREPARE_TARGET_N,$$(PREPARE_STAGE),$$(target),$$(host),$(1))))) + +prepare-maybe-clean-$(1): + $$(if $$(findstring true,$$(PREPARE_CLEAN)),\ + @$$(call E, cleaning destination $$(PREPARE_DEST_DIR)),) + $$(if $$(findstring true,$$(PREPARE_CLEAN)),\ + $$(Q)rm -rf $$(PREPARE_DEST_DIR),) + + +endef + -prepare-maybe-clean: - $(if $(findstring true,$(PREPARE_CLEAN)),\ - @$(call E, cleaning destination $(PREPARE_DEST_DIR)),) - $(if $(findstring true,$(PREPARE_CLEAN)),\ - $(Q)rm -rf $(PREPARE_DEST_DIR),)