diff --git a/build/jam/PackageRules b/build/jam/PackageRules index a6cb302762..8a8015aec1 100644 --- a/build/jam/PackageRules +++ b/build/jam/PackageRules @@ -334,14 +334,16 @@ rule BuildHaikuPackage package : packageInfo # create the other scripts local makeDirsScript = <$(grist)>haiku.package-make-dirs ; local copyFilesScript = <$(grist)>haiku.package-copy-files ; + local extractFilesScript = <$(grist)>haiku.package-extract-files ; MakeLocate $(makeDirsScript) $(copyFilesScript) : $(scriptDir) ; CreateContainerMakeDirectoriesScript $(package) : $(makeDirsScript) ; CreateContainerCopyFilesScript $(package) : $(copyFilesScript) ; + CreateContainerExtractFilesScript $(package) : $(extractFilesScript) ; local scripts = $(initVariablesScript) $(makeDirsScript) - $(copyFilesScript) ; + $(copyFilesScript) $(extractFilesScript) ; # call the build actions local mainScript = build_haiku_package ; diff --git a/build/scripts/build_haiku_package b/build/scripts/build_haiku_package index 736d94c95b..e88a74a4e2 100755 --- a/build/scripts/build_haiku_package +++ b/build/scripts/build_haiku_package @@ -56,6 +56,51 @@ rm=$rmAttrs mkindex=mkindex +extractFile() +{ + # extractFile + archiveFile=$1 + targetExtractedDir=$2 + extractedSubDir=$3 + # Ignore stripDebugSymbols. It's not relevant here, since executables and + # libraries shouldn't come from zip files or other archives anymore. + + extractDir=$tmpDir/extract + $rmAttrs -rf "$extractDir" + mkdir -p "$extractDir" + + case "$archiveFile" in + *.zip) + echo "Extracting $archiveFile ..." + $unzip -q -d "$extractDir" "$archiveFile" + ;; + *.tgz|*.tar.gz) + echo "Extracting $archiveFile ..." + tar -C "$extractDir" -xf "$archiveFile" + ;; + *.hpkg) + echo "Extracting $archiveFile ..." + if [ -n "$extractedSubDir" ]; then + $package extract -C "$extractDir" "$archiveFile" \ + "$extractedSubDir" + else + $package extract -C "$extractDir" "$archiveFile" + fi + ;; + *) + echo "Unhandled archive extension in build_haiku_image" \ + "extractFile()" + exit 1 + ;; + esac + + $cp -r "${sPrefix}$extractDir/$extractedSubDir/." \ + "${tPrefix}$targetExtractedDir" + + $rmAttrs -rf "$extractDir" +} + + # execute the scripts preparing the package contents while [ $# -gt 0 ]; do . $1