Build a system Haiku package

* Create rules (build/jam/PackageRules) and a script,
  build_haiku_package, to build hpkg files.
* Move all rule invocations that copy files and created symlinks and
  directories in the "system" directory from HaikuImage to
  HaikuPackages, which creates a package "haiku.hpkg".
* build_haiku_image: Comment out adding the copyrights info to
  AboutSystem for the moment.
This commit is contained in:
Ingo Weinhold
2011-07-17 16:54:11 +02:00
parent 9e3bdfb0ef
commit 355b8ba755
7 changed files with 631 additions and 339 deletions
+179 -3
View File
@@ -40,7 +40,7 @@ rule FPackageConfigSubPath
} else {
configSubPath = $(TARGET_PLATFORM) $(TARGET_ARCH) ;
}
if $(DEBUG) = 0 {
configSubPath += release ;
} else {
@@ -120,7 +120,7 @@ rule PackageSymLink
local packagename = $(1) ;
local symlinkPath = $(2) ;
local symlinkTarget = $(3) ;
local configSubPath = [ FPackageConfigSubPath $(packagename) ] ;
local symlinkDir = [ FReverse $(symlinkPath) ] ;
@@ -159,7 +159,7 @@ rule PackageDriverSymLink
{
# PackageDriverSymLink <packageName> : <devRelativeSymlinkComponents> ;
# <packageName>: Package name.
# <devRelativeSymlinkComponents>: Path components relative to the
# <devRelativeSymlinkComponents>: Path components relative to the
# /boot/home/config/add-ons/kernel/drivers/dev directory, e.g.
# "graphics mga.driver" (no quotation, of course).
#
@@ -248,3 +248,179 @@ actions together LinkInstallZip
{
ln -sf "`pwd`/$(2)" "$(1)" ;
}
# TODO: The stuff above should be moved (Copy) or removed (the rest).
#pragma mark - Haiku Packages
rule FHaikuPackageGrist package
{
local grist = [ Match "<(.*)>" : $(package:G) ] ;
return hpkg_$(grist:E="")_$(package:G=) ;
}
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_INSTALL_TARGETS_VAR on $(package)
= $(grist)_HAIKU_PACKAGE_INSTALL_TARGETS ;
}
rule BuildHaikuPackage package : packageInfo
{
local grist = [ FHaikuPackageGrist $(package) ] ;
local tempDir = [ FDirName $(HAIKU_PACKAGES_BUILD_DIR) $(grist) ] ;
local scriptDir = [ FDirName $(tempDir) scripts ] ;
# locate the package and package info
MakeLocate $(package) : $(HAIKU_PACKAGES_DIR) ;
SEARCH on $(packageInfo) += $(HAIKU_PACKAGE_INFOS_DIR) ;
LocalDepends $(package) : $(packageInfo) ;
# prepare the script that initializes the shell variables
local initVariablesScript = <$(grist)>haiku.package-init-vars ;
MakeLocate $(initVariablesScript) : $(scriptDir) ;
Always $(initVariablesScript) ;
local script = $(initVariablesScript) ;
AddVariableToScript $(script) : sourceDir : $(HAIKU_TOP) ;
AddVariableToScript $(script) : outputDir : $(HAIKU_OUTPUT_DIR) ;
AddVariableToScript $(script) : tmpDir : $(tempDir) ;
AddVariableToScript $(script) : addBuildCompatibilityLibDir
: $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR) ;
AddTargetVariableToScript $(script) : <build>addattr ;
AddTargetVariableToScript $(script) : <build>copyattr ;
AddTargetVariableToScript $(script) : <build>package ;
AddTargetVariableToScript $(script) : <build>rc ;
AddTargetVariableToScript $(script) : <build>resattr ;
AddTargetVariableToScript $(script) : <build>unzip ;
if $(HOST_RM_ATTRS_TARGET) {
AddTargetVariableToScript $(script) : $(HOST_RM_ATTRS_TARGET)
: rmAttrs ;
} else {
AddVariableToScript $(script) : rmAttrs : rm ;
}
# create the other scripts
local makeDirsScript = <$(grist)>haiku.package-make-dirs ;
local copyFilesScript = <$(grist)>haiku.package-copy-files ;
MakeLocate $(makeDirsScript) $(copyFilesScript) : $(scriptDir) ;
CreateContainerMakeDirectoriesScript $(package) : $(makeDirsScript) ;
CreateContainerCopyFilesScript $(package) : $(copyFilesScript) ;
local scripts = $(initVariablesScript) $(makeDirsScript)
$(copyFilesScript) ;
# call the build actions
local mainScript = build_haiku_package ;
SEARCH on $(mainScript) = [ FDirName $(HAIKU_TOP) build scripts ] ;
LocalDepends $(package) : $(mainScript) $(scripts) ;
BuildHaikuPackage1 $(package) : $(mainScript) $(packageInfo) $(scripts) ;
}
actions BuildHaikuPackage1
{
$(2[1]) "$(1)" "$(2[2])" $(2[3-])
}
rule AddDirectoryToPackage package : directoryTokens : attributeFiles
{
local dir = [ AddDirectoryToContainer $(package) : $(directoryTokens) ] ;
local grist = [ FHaikuPackageGrist $(package) ] ;
if $(attributeFiles) {
SEARCH on $(attributeFiles)
+= [ FDirName $(HAIKU_TOP) data package_directories $(grist) ] ;
ATTRIBUTE_FILES on $(dir) += $(attributeFiles) ;
}
return $(dir) ;
}
rule AddFilesToPackage package : directory : targets : destName
{
AddFilesToContainer $(package) : $(directory) : $(targets) : $(destName) ;
}
rule AddSymlinkToPackage package : directoryTokens : linkTarget : linkName
{
linkTarget = $(linkTarget:J=/) ;
AddSymlinkToContainer $(package) : $(directoryTokens) : $(linkTarget)
: $(linkName) ;
}
rule CopyDirectoryToPackage package : directoryTokens : sourceDirectory
: targetDirectoryName : excludePatterns : alwaysUpdate
{
CopyDirectoryToContainer $(package) : $(directoryTokens)
: $(sourceDirectory) : $(targetDirectoryName) : $(excludePatterns)
: $(alwaysUpdate) ;
}
rule AddHeaderDirectoryToPackage package : dirTokens : dirName : alwaysUpdate
{
AddHeaderDirectoryToContainer $(package) : $(dirTokens) : $(dirName)
: $(alwaysUpdate) ;
}
rule AddWifiFirmwareToPackage package : driver : subDirToExtract : archive
: extract
{
AddWifiFirmwareToContainer $(package) : $(driver) : $(subDirToExtract)
: $(archive) : $(extract) ;
}
rule ExtractArchiveToPackage package : dirTokens : archiveFile : alwaysUpdate
: extractedSubDir
{
# TODO: Update support?
ExtractArchiveToContainer $(package) : $(dirTokens) : $(archiveFile)
: $(extractedSubDir) ;
}
rule AddDriversToPackage package : relativeDirectoryTokens : targets
{
AddDriversToContainer $(package) : $(relativeDirectoryTokens) : $(targets) ;
}
rule AddNewDriversToPackage package : relativeDirectoryTokens : targets
{
AddNewDriversToContainer $(package) : $(relativeDirectoryTokens)
: $(targets) ;
}
rule AddBootModuleSymlinksToPackage package : targets
{
AddBootModuleSymlinksToContainer $(package) : $(targets) ;
}
rule AddLibrariesToPackage package : directory : libs
{
AddLibrariesToContainer $(package) : $(directory) : $(libs) ;
}