diff --git a/build/jam/ImageRules b/build/jam/ImageRules index 48fb107f73..ae4ecd6516 100644 --- a/build/jam/ImageRules +++ b/build/jam/ImageRules @@ -177,6 +177,18 @@ rule AddFilesToContainer container : directoryTokens : targets : destName if $(filterVar) { targets = [ FilterContainerUpdateTargets $(targets) : $(filterVar) ] ; + + # If there are any targets, mark the container as to be included in + # an update, too, if it has set the update inheritance variable. + # This makes updating a target that lives in a package on an image + # work. + if $(targets) { + local updateVariable = [ on $(container) return + $(HAIKU_CONTAINER_INHERIT_UPDATE_VARIABLE) ] ; + if $(updateVariable) { + $(updateVariable) on $(container) = 1 ; + } + } } } @@ -480,7 +492,9 @@ rule CreateContainerMakeDirectoriesScript container : script # If the image shall only be updated, we don't create directories. if $(dirsToCreate) && ( ! [ on $(container) return $(HAIKU_CONTAINER_UPDATE_ONLY) ] - || [ IncludeAllTargetsInContainer $(container) ] ) { + || [ IncludeAllTargetsInContainer $(container) ] + || [ on $(container) return + $(HAIKU_CONTAINER_ALWAYS_CREATE_DIRECTORIES) ] ) { Depends $(scriptBody) : $(dirsToCreate) ; CreateContainerMakeDirectoriesScript1 $(scriptBody) : $(dirsToCreate) ; diff --git a/build/jam/MiscRules b/build/jam/MiscRules index 973c368e08..326f0b90d1 100644 --- a/build/jam/MiscRules +++ b/build/jam/MiscRules @@ -394,13 +394,17 @@ rule DefineBuildProfile name : type : path { case "update" : { JAM_TARGETS = $(buildTarget) ; SetUpdateHaikuImageOnly 1 ; + HAIKU_PACKAGES_UPDATE_ONLY = 1 ; HAIKU_INCLUDE_IN_IMAGE on $(HAIKU_BUILD_PROFILE_PARAMETERS) = 1 ; + HAIKU_INCLUDE_IN_PACKAGES on $(HAIKU_BUILD_PROFILE_PARAMETERS) = 1 ; } case "update-all" : { JAM_TARGETS = $(buildTarget) ; SetUpdateHaikuImageOnly 1 ; + HAIKU_PACKAGES_UPDATE_ONLY = 1 ; HAIKU_INCLUDE_IN_IMAGE = 1 ; + HAIKU_INCLUDE_IN_PACKAGES = 1 ; } case "mount" : { diff --git a/build/jam/PackageRules b/build/jam/PackageRules index b6bf583e35..4011cb8e37 100644 --- a/build/jam/PackageRules +++ b/build/jam/PackageRules @@ -268,13 +268,20 @@ rule HaikuPackage package local grist = [ FHaikuPackageGrist $(package) ] ; HAIKU_CONTAINER_GRIST on $(package) = $(grist) ; - HAIKU_INCLUDE_IN_CONTAINER_VAR on $(package) - = $(grist)_HAIKU_INCLUDE_IN_PACKAGE ; + HAIKU_INCLUDE_IN_CONTAINER_VAR on $(package) = HAIKU_INCLUDE_IN_PACKAGES ; HAIKU_INSTALL_TARGETS_VAR on $(package) = $(grist)_HAIKU_PACKAGE_INSTALL_TARGETS ; HAIKU_CONTAINER_SYSTEM_DIR_TOKENS on $(package) = ; HAIKU_CURRENTLY_BUILT_HAIKU_PACKAGE = $(package) ; + + if $(HAIKU_PACKAGES_UPDATE_ONLY) { + HAIKU_CONTAINER_UPDATE_ONLY on $(package) = 1 ; + HAIKU_CONTAINER_INHERIT_UPDATE_VARIABLE on $(package) + = HAIKU_INCLUDE_IN_IMAGE ; + } + + HAIKU_CONTAINER_ALWAYS_CREATE_DIRECTORIES on $(package) = 1 ; } @@ -301,6 +308,8 @@ rule BuildHaikuPackage package : packageInfo AddVariableToScript $(script) : tmpDir : $(tempDir) ; AddVariableToScript $(script) : addBuildCompatibilityLibDir : $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR) ; + AddVariableToScript $(script) : updateOnly + : [ on $(package) return $(HAIKU_CONTAINER_UPDATE_ONLY) ] ; AddTargetVariableToScript $(script) : addattr ; AddTargetVariableToScript $(script) : copyattr ; AddTargetVariableToScript $(script) : package ; diff --git a/build/scripts/build_haiku_package b/build/scripts/build_haiku_package index 0e8228dd88..fbbefdfd81 100755 --- a/build/scripts/build_haiku_package +++ b/build/scripts/build_haiku_package @@ -6,6 +6,7 @@ set -o errexit # outputDir # tmpDir # addBuildCompatibilityLibDir +# updateOnly # # addattr # copyattr @@ -23,7 +24,6 @@ fi packagePath="$1" packageInfoPath="$2" shift 2 -echo "Building package $1 with info $2..." if [ $# -gt 0 ]; then . $1 @@ -61,5 +61,9 @@ done # create the package -rm -f "$packagePath" -$package create -i "$packageInfoPath" -C "$contentsDir" "$packagePath" +if [ ! $updateOnly ]; then + rm -f "$packagePath" + $package create -q -i "$packageInfoPath" -C "$contentsDir" "$packagePath" +else + $package add -q -f -i "$packageInfoPath" -C "$contentsDir" "$packagePath" . +fi