* Build libsolv and the dependency solver part of the package kit for
the build platform.
* Add build tool get_package_dependencies. Given a list of package files
and a list of repository files it determines the additional packages
that need to be retrieved from the repositories and prints their URLs.
* Add rules to work with external repositories in the build system
(build/jam/RepositoryRules):
- PackageRepository declares an external repository with all its
packages. The URL of the repository file isn't specified. It is
computed from a given base URL and the SHA256 hash of the list of
package files.
- GeneratedRepositoryPackageList generates a file containing the file
names of all packages in a repository.
- IsPackageAvailable returns whether a package is available in any
repository.
- PackageURL returns the URL for a package.
* Declare the HaikuPorts repository for x86_gcc2
(build/jam/repositories/HaikuPorts/x86_gcc2).
* Add rule AddHaikuImagePackages to add a package to the image and rule
IsHaikuImagePackageAdded to determine whether a package has been
added.
* OptionalPackages: Remove all entries that just downloaded and
installed an external package. AddHaikuImagePackages can be used
instead and is used in the remaining entries. Also move the remaining
optional package dependency declarations from
OptionalPackageDependencies here.
* ExtractBuildFeatureArchives: Instead of the URL parameter a package
name must be specified now. This allows to simplify BuildFeatures
significantly, since there's no dealing with URLs anymore. "if" out
the entries that aren't supported yet.
* build_haiku_image: For the packages installed in system and common
resolve their dependencies and download and install them as well.
107 lines
4.2 KiB
Plaintext
107 lines
4.2 KiB
Plaintext
# Haiku Jamrules
|
|
|
|
# Main directories used by the build.
|
|
HAIKU_OUTPUT_DIR ?= [ FDirName $(HAIKU_TOP) generated ] ;
|
|
HAIKU_BUILD_OUTPUT_DIR = [ FDirName $(HAIKU_OUTPUT_DIR) build ] ;
|
|
HAIKU_BUILD_DIR = [ FDirName $(HAIKU_TOP) build ] ;
|
|
HAIKU_BUILD_RULES_DIR = [ FDirName $(HAIKU_BUILD_DIR) jam ] ;
|
|
HAIKU_OBJECT_DIR = [ FDirName $(HAIKU_OUTPUT_DIR)
|
|
objects ] ;
|
|
HAIKU_CATALOGS_OBJECT_DIR = [ FDirName $(HAIKU_OBJECT_DIR)
|
|
catalogs ] ;
|
|
HAIKU_COMMON_PLATFORM_OBJECT_DIR = [ FDirName $(HAIKU_OBJECT_DIR) common ] ;
|
|
HAIKU_DOWNLOAD_DIR = [ FDirName $(HAIKU_OUTPUT_DIR)
|
|
download ] ;
|
|
HAIKU_OPTIONAL_BUILD_PACKAGES_DIR = [ FDirName $(HAIKU_OUTPUT_DIR)
|
|
build_packages ] ;
|
|
|
|
# Cache files for header scanning and jamfile caching
|
|
HCACHEFILE = header_cache ;
|
|
JCACHEFILE = jamfile_cache ;
|
|
LOCATE on $(HCACHEFILE) $(JCACHEFILE) = $(HAIKU_BUILD_OUTPUT_DIR) ;
|
|
|
|
# include BuildConfig
|
|
local buildConfig = [ GLOB $(HAIKU_BUILD_OUTPUT_DIR) : BuildConfig ] ;
|
|
if ! $(buildConfig) {
|
|
ECHO "No `BuildConfig' found in $(HAIKU_BUILD_OUTPUT_DIR)!" ;
|
|
EXIT "Run ./configure in the source tree's root directory first!" ;
|
|
}
|
|
LOCATE on BuildConfig = $(HAIKU_BUILD_OUTPUT_DIR) ;
|
|
include BuildConfig ;
|
|
|
|
# The build setup and rules are neatly organized in several files. Include
|
|
# them now. Start with the side-effect-less rules, since they are the most
|
|
# likely to be used in the top level context (i.e. not only in rules).
|
|
# At the end include BuildSetup that sets up global variables etc. The
|
|
# optional user-defined UserBuildConfig is included thereafter.
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) HelperRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) MathRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) BeOSRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) LocaleRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) CommandLineArguments ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) ConfigRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) DocumentationRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) FileRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) HeadersRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) KernelRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) BootRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) ImageRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) CDRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) MainBuildRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) MiscRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) OverriddenJamRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) PackageRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) RepositoryRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) TestsRules ] ;
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) BuildSetup ] ;
|
|
|
|
# Include the repositories for this architecture.
|
|
local repositoriesDirectory
|
|
= [ FDirName $(HAIKU_BUILD_RULES_DIR) repositories ] ;
|
|
local repository ;
|
|
for repository in HaikuPorts {
|
|
local repositoryDirectory
|
|
= [ FDirName $(repositoriesDirectory) $(repository) ] ;
|
|
local file = [ Glob $(repositoryDirectory) : $(HAIKU_PACKAGING_ARCH) ] ;
|
|
if $(file) {
|
|
include $(file) ;
|
|
}
|
|
}
|
|
|
|
# Declare no-op user-overridable build rules.
|
|
rule UserBuildConfigRulePostBuildTargets { }
|
|
rule UserBuildConfigRulePreImage { }
|
|
rule UserBuildConfigRulePostImage { }
|
|
|
|
# Include UserBuildConfig.
|
|
if ! $(HAIKU_IGNORE_USER_BUILD_CONFIG) {
|
|
local userBuildConfig
|
|
= [ GLOB $(HAIKU_BUILD_RULES_DIR) : UserBuildConfig ] ;
|
|
if $(userBuildConfig) {
|
|
include $(userBuildConfig) ;
|
|
}
|
|
|
|
# allow for a separate UserBuildConfig per output directory
|
|
local userBuildConfig
|
|
= [ GLOB $(HAIKU_OUTPUT_DIR) : UserBuildConfig ] ;
|
|
if $(userBuildConfig) {
|
|
include $(userBuildConfig) ;
|
|
}
|
|
}
|
|
|
|
include [ FDirName $(HAIKU_BUILD_RULES_DIR) ReleaseBuildProfiles ] ;
|
|
|
|
# If a build profile was specified on the command line, now is the time to
|
|
# check whether it is unknown or one of the default profiles.
|
|
if $(HAIKU_BUILD_PROFILE) && ! $(HAIKU_BUILD_PROFILE_DEFINED) {
|
|
# define the obvious default profiles
|
|
if $(HAIKU_BUILD_PROFILE) in anyboot-image cd-image image install
|
|
vmware-image {
|
|
DefineBuildProfile $(HAIKU_BUILD_PROFILE) : $(HAIKU_BUILD_PROFILE) ;
|
|
} else {
|
|
Exit "Build profile" $(HAIKU_BUILD_PROFILE) "not defined." ;
|
|
}
|
|
}
|
|
|
|
PrepareConfigVariables ;
|