From ba96552b6a796adbc66613492d4b6658b2e8ce16 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 31 May 2013 22:37:13 +0200 Subject: [PATCH] Support extracting archives to the packages we build * BuildHaikuPackage rule: Create the script that contains the extraction commands. * build_haiku_package: Add extractFile() function (stripped down version from build_haiku_image). In build_haiku_image the functionality was mainly used to extract the optional packages, which is no longer done. We still need it e.g. for the Wifi firmware packages that want to be extracted. --- build/jam/PackageRules | 4 ++- build/scripts/build_haiku_package | 45 +++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) 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