From: Daniel Dickinson <open...@daniel.thecshore.com>
If packages have already been built by the base system we don't want
a different version in another repo (e.g. built by SDK) because this
could cause conflicts with packaes that depend on it. Therefore for
packages built by the base system, prevent the SDK from reconfiguring
the build options.
The approach taken is the one which least perturbs the build system
while still being reliable, of the ones considered. Other approachs
involved modifying package-ipkg.mk and packages.mk in order to
override the compile or install targets, however there are rather a
lot of 'moving parts' to the compile target, and the number of fragile
changes required is quite high. In addition, simply looking for .built
stamps is unreliable because packages which were once built due to a
previous configuration, but which are out-of-date and/or no longer
desired, would get recorded as built unless you remove the .built
stamp when doing package/compile, however that would result in every
package attempting to do a rebuild, even with no changes.
In any event the change to subdir.mk is required because of the
fact that the package name we need is the 'source' package name,
which corresponds to the last part of the subdirectory path in
which the package resides.
Signed-off-by: Daniel Dickinson <open...@daniel.thecshore.com>
---
Makefile | 5 +++--
include/package.mk | 12 +++++++++++-
include/subdir.mk | 4 ++--
include/toplevel.mk | 2 +-
package/Makefile | 8 ++++++++
target/sdk/Makefile | 2 ++
6 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
index a12e3ea..91c4779 100644
--- a/Makefile
+++ b/Makefile
@@ -41,8 +41,9 @@ else
$(toolchain/stamp-install): $(tools/stamp-install)
$(target/stamp-compile): $(toolchain/stamp-install) $(tools/stamp-install)
$(BUILD_DIR)/.prepared
$(package/stamp-compile): $(target/stamp-compile) $(package/stamp-cleanup)
-$(package/stamp-install): $(package/stamp-compile)
-$(target/stamp-install): $(package/stamp-compile) $(package/stamp-install)
+$(package/stamp-markforsdk): $(package/stamp-compile)
+$(package/stamp-install): $(package/stamp-compile) $(package/stamp-markforsdk)
+$(target/stamp-install): $(package/stamp-compile) $(package/stamp-markforsdk)
$(package/stamp-install)
printdb:
@true
diff --git a/include/package.mk b/include/package.mk
index 1dfbd68..0fd3455 100644
--- a/include/package.mk
+++ b/include/package.mk
@@ -7,7 +7,7 @@
__package_mk:=1
-all: $(if $(DUMP),dumpinfo,compile)
+all: $(if $(DUMP),dumpinfo,compile markforsdk)
PKG_BUILD_DIR ?= $(BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install
@@ -66,6 +66,11 @@ STAMP_INSTALLED:=$(STAGING_DIR)/stamp/.$(PKG_DIR_NAME)$(if
$(BUILD_VARIANT),.$(B
STAGING_FILES_LIST:=$(PKG_DIR_NAME)$(if
$(BUILD_VARIANT),.$(BUILD_VARIANT),).list
define CleanStaging
+ $(if $(PKG_NAME), \
+ rm -f $(STAGING_DIR)/pkgstamp-current/$(PKG_NAME)
+ ,\
+ rm -rf $(STAGING_DIR)/pkgstamp-current \
+ )
rm -f $(STAMP_INSTALLED)
@-(\
cd "$(STAGING_DIR)"; \
@@ -214,6 +219,10 @@ define Build/DefaultTargets
rm -rf $(TMP_DIR)/stage-$(PKG_DIR_NAME)
touch $$@
+ markforsdk:
+ mkdir -p $(STAGING_DIR)/pkgstamp-current
+ touch $(STAGING_DIR)/pkgstamp-current/$(SRC_PKG_NAME)
+
ifdef Build/InstallDev
compile: $(STAMP_INSTALLED)
endif
@@ -298,6 +307,7 @@ dumpinfo:
download:
prepare:
configure:
+markforsdk:
compile: prepare-package-install
install: compile
diff --git a/include/subdir.mk b/include/subdir.mk
index 8dc9a78..380e602 100644
--- a/include/subdir.mk
+++ b/include/subdir.mk
@@ -9,7 +9,7 @@ ifeq ($(MAKECMDGOALS),prereq)
SUBTARGETS:=prereq
PREREQ_ONLY:=1
else
- SUBTARGETS:=clean download prepare compile install update refresh prereq
dist distcheck configure
+ SUBTARGETS:=clean download prepare compile markforsdk install update refresh
prereq dist distcheck configure
endif
subtarget-default = $(filter-out ., \
@@ -43,7 +43,7 @@ define subdir
$(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(target): $(if
$(QUILT),,$($(1)/$(bd)/$(target)) $(call $(1)//$(target),$(1)/$(bd))))
$(if $(BUILD_LOG),@mkdir -p $(BUILD_LOG_DIR)/$(1)/$(bd))
$(foreach variant,$(if $(BUILD_VARIANT),$(BUILD_VARIANT),$(if $(strip
$($(1)/$(bd)/variants)),$($(1)/$(bd)/variants),$(if
$($(1)/$(bd)/default-variant),$($(1)/$(bd)/default-variant),__default))),
- $(if $(call debug,$(1)/$(bd),v),,@)+$(if $(BUILD_LOG),set -o pipefail;)
$$(SUBMAKE) -r -C $(1)/$(bd) $(target) BUILD_VARIANT="$(filter-out
__default,$(variant))" $(if $(BUILD_LOG),SILENT= 2>&1 | tee
$(BUILD_LOG_DIR)/$(1)/$(bd)/$(target).txt) $(if $(findstring
$(bd),$($(1)/builddirs-ignore-$(target))), || $(call ERROR,$(1), ERROR: $(1)/$(bd) failed to
build$(if $(filter-out __default,$(variant)), (build variant: $(variant))).))
+ $(if $(call debug,$(1)/$(bd),v),,@)+$(if $(BUILD_LOG),set -o pipefail;)
$$(SUBMAKE) -r -C $(1)/$(bd) $(target) BUILD_VARIANT="$(filter-out
__default,$(variant))" SRC_PKG_NAME=$(notdir /$(bd)) $(if $(BUILD_LOG),SILENT= 2>&1
| tee $(BUILD_LOG_DIR)/$(1)/$(bd)/$(target).txt) $(if $(findstring
$(bd),$($(1)/builddirs-ignore-$(target))), || $(call ERROR,$(1), ERROR: $(1)/$(bd) failed to
build$(if $(filter-out __default,$(variant)), (build variant: $(variant))).))
)
$(if $(PREREQ_ONLY)$(DUMP_TARGET_DB),,
# aliases
diff --git a/include/toplevel.mk b/include/toplevel.mk
index d13a370..2eff39e 100644
--- a/include/toplevel.mk
+++ b/include/toplevel.mk
@@ -70,7 +70,7 @@ ULIMIT_FIX=_limit=`ulimit -n`; [ "$$_limit" = "unlimited" -o
"$$_limit" -ge 1024
prepare-mk: FORCE ;
ifdef SDK
- IGNORE_PACKAGES = linux
+ include $(TOPDIR)/ignore-packages.mk
endif
_ignore = $(foreach p,$(IGNORE_PACKAGES),--ignore $(p))
diff --git a/package/Makefile b/package/Makefile
index aa5d522..0b0c8d0 100644
--- a/package/Makefile
+++ b/package/Makefile
@@ -22,6 +22,7 @@ ifneq ($(IGNORE_ERRORS),)
package-ignore-errors := $(if
$(package-ignore-errors),$(package-ignore-errors),n m)
$(curdir)/builddirs-ignore-download := $(foreach
m,$(package-ignore-errors),$(package-$(m)-filter))
$(curdir)/builddirs-ignore-compile := $(foreach
m,$(package-ignore-errors),$(package-$(m)-filter))
+ $(curdir)/builddirs-ignore-markforsdk := $(foreach
m,$(package-ignore-errors),$(package-$(m)-filter))
endif
ifdef CONFIG_USE_MKLIBS
@@ -183,9 +184,16 @@ $(curdir)/preconfig:
$(curdir)/flags-install:= -j1
+# If rebuilding all packages, clean out the record (for sdk) of built packages
so
+# that it is guaranteed to not include packages which were built at some
point, but
+# which are no longer part of the build.
+package/compile:
+ rm -f $(STAGING_DIR)/pkgstamp-current/*
+
$(eval $(call stampfile,$(curdir),package,prereq,.config))
$(eval $(call stampfile,$(curdir),package,cleanup,$(TMP_DIR)/.build))
$(eval $(call stampfile,$(curdir),package,compile,$(TMP_DIR)/.build))
+$(eval $(call stampfile,$(curdir),package,markforsdk,$(TMP_DIR)/.build))
$(eval $(call stampfile,$(curdir),package,install,$(TMP_DIR)/.build))
$(eval $(call subdir,$(curdir)))
diff --git a/target/sdk/Makefile b/target/sdk/Makefile
index 4fec516..e2010a4 100644
--- a/target/sdk/Makefile
+++ b/target/sdk/Makefile
@@ -104,6 +104,8 @@ $(BIN_DIR)/$(SDK_NAME).tar.bz2: clean
$(TOPDIR)/package/Makefile \
$(SDK_BUILD_DIR)/package/
+ # Used to prevent altering compile options for already build packages
+ (echo -n "IGNORE_PACKAGES = "; cd $(STAGING_DIR)/pkgstamp-current && ls -A
|tr $$'\n' ' ') >>$(SDK_BUILD_DIR)/ignore-packages.mk
-rm -f $(SDK_BUILD_DIR)/feeds.conf.default
$(if $(BASE_FEED),echo "$(BASE_FEED)" >
$(SDK_BUILD_DIR)/feeds.conf.default)
if [ -f $(TOPDIR)/feeds.conf ]; then \