Enhance InstallOptionalHaikuImagePackage to accept a new parameter, which

indicates the archive to be usable with either GCC. When utilized, the
packages shared libraries will automatically be symlinked in the alternative
gcc subdir, eg common/lib/gcc4. At the moment, packages that set isCDPackage
are not supported, as Installer needs to be enhanced.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36456 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Matt Madia
2010-04-24 19:52:36 +00:00
parent b64b6705ad
commit 4eb0a8c2fd
4 changed files with 98 additions and 12 deletions
+9
View File
@@ -8,6 +8,13 @@ HAIKU_CD = $(HAIKU_CD_NAME) ;
HAIKU_CD_LABEL ?= $(HAIKU_DEFAULT_CD_LABEL) ;
MakeLocate $(HAIKU_CD) : $(HAIKU_CD_DIR) ;
# Detect a hybrid GCC2/GCC4 image.
local isHybridBuild ;
if $(HAIKU_ADD_ALTERNATIVE_GCC_LIBS) = 1
&& $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR) {
isHybridBuild = 1 ;
}
# prepare the script that initializes the shell variables
HAIKU_CD_INIT_VARIABLES_SCRIPT = <HaikuCD>haiku.cd-init-vars ;
local script = $(HAIKU_CD_INIT_VARIABLES_SCRIPT) ;
@@ -18,6 +25,8 @@ AddVariableToScript $(script) : sourceDir : $(HAIKU_TOP) ;
AddVariableToScript $(script) : outputDir : $(HAIKU_OUTPUT_DIR) ;
AddVariableToScript $(script) : tmpDir : $(HAIKU_TMP_DIR) ;
AddVariableToScript $(script) : isCD : 1 ;
AddVariableToScript $(script) : gccVersion : $(HAIKU_GCC_VERSION[1]) ;
AddVariableToScript $(script) : isHybridBuild : $(isHybridBuild) ;
AddVariableToScript $(script) : cdLabel : $(HAIKU_CD_LABEL) ;
AddVariableToScript $(script) : addBuildCompatibilityLibDir
: $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR) ;
+9
View File
@@ -723,6 +723,13 @@ HAIKU_INSTALL_DIR ?= $(HAIKU_DEFAULT_INSTALL_DIR) ;
# the pseudo target all image contents is attached to
NotFile $(HAIKU_IMAGE_CONTAINER_NAME) ;
# Detect a hybrid GCC2/GCC4 image.
local isHybridBuild ;
if $(HAIKU_ADD_ALTERNATIVE_GCC_LIBS) = 1
&& $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR) {
isHybridBuild = 1 ;
}
# prepare the script that initializes the shell variables
HAIKU_IMAGE_INIT_VARIABLES_SCRIPT = <HaikuImage>haiku.image-init-vars ;
local script = $(HAIKU_IMAGE_INIT_VARIABLES_SCRIPT) ;
@@ -734,6 +741,8 @@ AddVariableToScript $(script) : outputDir : $(HAIKU_OUTPUT_DIR) ;
AddVariableToScript $(script) : tmpDir : $(HAIKU_TMP_DIR) ;
AddVariableToScript $(script) : installDir : $(HAIKU_INSTALL_DIR) ;
#AddVariableToScript $(script) : isImage : 1 ;
AddVariableToScript $(script) : gccVersion : $(HAIKU_GCC_VERSION[1]) ;
AddVariableToScript $(script) : isHybridBuild : $(isHybridBuild) ;
AddVariableToScript $(script) : imageSize : $(HAIKU_IMAGE_SIZE) ;
AddVariableToScript $(script) : imageLabel : $(HAIKU_IMAGE_LABEL) ;
AddVariableToScript $(script) : addBuildCompatibilityLibDir
+26 -9
View File
@@ -283,16 +283,17 @@ rule CopyDirectoryToContainer container : directoryTokens : sourceDirectory
}
rule ExtractArchiveToContainer container : directoryTokens : archiveFile
: extractedSubDir
: extractedSubDir : isGCCAgnostic
{
# ExtractArchiveToContainer <container> : <directory> : <archiveFile>
# : <extractedSubDir> ;
# : <extractedSubDir> : <isGCCAgnostic> ;
local directory = [ AddDirectoryToContainer $(container)
: $(directoryTokens) ] ;
ARCHIVE_FILES_TO_INSTALL on $(directory) += $(archiveFile) ;
ARCHIVE_SUBDIR_TO_INSTALL_FROM on $(archiveFile) = $(extractedSubDir) ;
ARCHIVE_IS_GCC_AGNOSTIC on $(archiveFile) = $(isGCCAgnostic) ;
}
rule AddDriversToContainer container : relativeDirectoryTokens : targets
@@ -604,7 +605,13 @@ rule CreateContainerExtractFilesScript container : script
local extractedSubDir = [ on $(archiveFile)
return $(ARCHIVE_SUBDIR_TO_INSTALL_FROM) ] ;
NotFile $(extractedSubDir) ;
ARCHIVE_SUBDIR_TO_INSTALL_FROM on $(dummyTarget) =
$(extractedSubDir:E=.) ;
local isGCCAgnostic = [ on $(archiveFile)
return $(ARCHIVE_IS_GCC_AGNOSTIC) ] ;
ARCHIVE_IS_GCC_AGNOSTIC on $(dummyTarget) =
$(isGCCAgnostic:E=false) ;
Depends $(dummyTarget) : $(initScript) $(archiveFile)
$(serializationDependency) ;
@@ -612,7 +619,7 @@ rule CreateContainerExtractFilesScript container : script
serializationDependency = $(dummyTarget) ;
AddExtractFileToContainerExtractFilesScript $(dummyTarget)
: $(initScript) $(archiveFile) $(extractedSubDir) ;
: $(initScript) $(archiveFile) ;
}
}
}
@@ -620,7 +627,9 @@ rule CreateContainerExtractFilesScript container : script
actions AddExtractFileToContainerExtractFilesScript
{
echo extractFile "\"$(2[2])\"" "\"$(TARGET_DIR)\"" "\"$(2[3])\"" >> $(2[1])
echo extractFile "\"$(2[2])\"" "\"$(TARGET_DIR)\"" \
"\"$(ARCHIVE_SUBDIR_TO_INSTALL_FROM)\"" \
"\"$(ARCHIVE_IS_GCC_AGNOSTIC)\"" >> $(2[1])
}
@@ -725,16 +734,16 @@ rule AddWifiFirmwareToHaikuImage driver : package : archive : extract
}
rule ExtractArchiveToHaikuImage dirTokens : archiveFile : alwaysUpdate
: extractedSubDir
: extractedSubDir : isGCCAgnostic
{
# ExtractArchiveToHaikuImage <dirTokens> : <archiveFile> : <alwaysUpdate>
# : <extractedSubDir> ;
# : <extractedSubDir> : <isGCCAgnostic> ;
# If the image shall only be updated, we extract only, if explicitely
# requested.
if ! [ IsUpdateHaikuImageOnly ] || $(alwaysUpdate) {
ExtractArchiveToContainer $(HAIKU_IMAGE_CONTAINER_NAME) : $(dirTokens)
: $(archiveFile) : $(extractedSubDir) ;
: $(archiveFile) : $(extractedSubDir) : $(isGCCAgnostic) ;
}
}
@@ -810,6 +819,7 @@ rule InstallSourceArchive file : url
}
rule InstallOptionalHaikuImagePackage package : url : dirTokens : isCDPackage
: isGCCAgnostic
{
# download archive file
local archiveFile = [ DownloadFile $(package) : $(url) ] ;
@@ -819,9 +829,16 @@ rule InstallOptionalHaikuImagePackage package : url : dirTokens : isCDPackage
# image!
# copy onto image
AddFilesToHaikuImage _packages_ : $(archiveFile) ;
#if $(isGCCAgnostic) {
# TODO: The archives would need to be marked whether they are
# gcc-agnostic (e.g. via attribute). Installer's UnzipEngine would
# also need to be updated, to read this attribute and create the
# alt gcc dir and symlinks as needed.
#}
} else {
# extract onto image
ExtractArchiveToHaikuImage $(dirTokens) : $(archiveFile) ;
ExtractArchiveToHaikuImage $(dirTokens) : $(archiveFile) : :
: $(isGCCAgnostic) ;
}
}
+54 -3
View File
@@ -6,6 +6,8 @@ set -o errexit
# outputDir
# tmpDir
# addBuildCompatibilityLibDir
# gccVersion
# isHybridBuild
# The following are only for image types:
# installDir
# isImage
@@ -94,20 +96,20 @@ else
mkindex=mkindex
fi
extractFile()
{
# extractFile <archive> <directory>
archiveFile=$1
targetExtractedDir=$2
extractedSubDir=$3
isGCCAgnostic=$4
echo "Extracting $archiveFile ..."
extractDir=$tmpDir/extract
$rmAttrs -rf "$extractDir"
mkdir -p "$extractDir"
case "$archiveFile" in
*.zip)
$unzip -q -d "$extractDir" "$archiveFile"
@@ -120,19 +122,68 @@ extractFile()
exit 1
;;
esac
if [ -f $extractDir/.OptionalPackageDescription ]; then
cat $extractDir/.OptionalPackageDescription >> $copyrightsFile
echo >> $copyrightsFile
rm $extractDir/.OptionalPackageDescription
fi
if [ "$isGCCAgnostic" == "true" ] && [ $isHybridBuild ] ; then
#if [ $isGCCAgnostic -eq 1 ] && [ $isHybridBuild ] ; then
extractedLibs=`find "$extractDir/$extractedSubDir/" -name "*.so"`
moreExtractedLibs=`find "$extractDir/$extractedSubDir/" -name "*.so.*"`
createSymlinksForHybrid $extractedLibs $moreExtractedLibs
fi
$cp -r "${sPrefix}$extractDir/$extractedSubDir/." "${tPrefix}$targetExtractedDir"
$rmAttrs -rf "$extractDir"
}
createSymlinksForHybrid()
{
# createSymlinksForHybrid <libraries>
# Determine the alternative gcc subdir.
if [ $gccVersion -eq 2 ]; then
gccAltDir=gcc4
else
gccAltDir=gcc2
fi
# Iterate over the library file paths that were passed in.
for srcPathLib in $@; do
# determine the relative path of the library
relPathLib=`echo $srcPathLib | \
sed -e "s:${extractDir}/${extractedSubDir}/::"`
relPath=`dirname $relPathLib`
# check if that relative path is one of the standard library paths
standardLibPaths="system/lib common/lib home/config/lib"
isStandardPath=
for stdLibPath in $standardLibPaths; do
if [ "$relPath" == "$stdLibPath" ]; then
isStandardPath=true
break
fi
done
# create alt gcc symlinks for libs inside standard paths
if [ $isStandardPath ]; then
srcPath=`dirname $srcPathLib`
srcLib=`basename $srcPathLib`
destLinkDir="${srcPath}/${gccAltDir}"
destLinkTarget="../$srcLib"
mkdir -p $destLinkDir
ln -sf -t $destLinkDir $destLinkTarget
fi
done
}
mkdir -p $tmpDir
copyrightsFile=$tmpDir/copyrights
$rmAttrs -f $copyrightsFile