haiku/build/jam/CommandLineArguments
Ingo Weinhold 37aefc9c6f * Moved jam argument processing to new build/jam/CommandLineArguments.
* Check the first argument for "help" as well. If given print a somewhat
  helpful text. Consider this my excuse to close ticket #1883. :-)
* Track available and added optional packages and fail, if an optional package
  is requested that doesn't exist. Closes ticket #3332.
* Check for duplicate build profile definitions and fail if encountered.
  Closes ticket #3333.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29298 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-02-23 22:33:09 +00:00

96 lines
3.2 KiB
Plaintext

# Rules related to processing of jam command line arguments.
rule ProcessCommandLineArguments
{
# analyze and optionally replace jam's target parameters
HAIKU_ORIGINAL_JAM_TARGETS = $(JAM_TARGETS) ;
HAIKU_BUILD_PROFILE = ;
if $(JAM_TARGETS) {
switch $(JAM_TARGETS[1]) {
# If the target to be built is "all" (i.e. the default) and we're in
# the output directory, the root directory of the build system, or
# in "src/", we change the target to be built to "haiku-image".
case all : {
if ! $(INVOCATION_SUBDIR) || $(INVOCATION_SUBDIR) = src {
JAM_TARGETS = haiku-image ;
}
}
# Print usage text.
case help : {
Echo "Individual targets (applications, libraries, drivers,...)"
" can be built by just" ;
Echo "passing them as arguments to jam. The recommended method"
"to build or update a" ;
Echo "Haiku image or installation is to use a build profile"
"with one of the build" ;
Echo "profile actions. Typical command lines using a build"
"profile looks like this:" ;
Echo " jam @image" ;
Echo " jam @install update libbe.so" ;
Echo " jam @vmware-image mount" ;
Echo ;
Echo "Default build profiles:" ;
Echo " image - A raw disk image." ;
Echo " vmware-image - A VMware disk image." ;
Echo " install - A Haiku installation in a directory." ;
Echo ;
Echo "Build profile actions:" ;
Echo " build - Build a Haiku"
"image/installation. This is the default" ;
Echo " action, i.e. it can be"
"omitted." ;
Echo " update <target> ... - Update the specified targets in"
" the Haiku" ;
Echo " image/installation." ;
Echo " update-all - Update all targets in the Haiku"
"image/installation." ;
Echo " mount - Mount the Haiku image in the"
"bfs_shell." ;
Echo ;
Echo "For more details on how to customize Haiku builds read" ;
Echo "build/jam/UserBuildConfig.ReadMe." ;
Exit ;
}
# The "run" target allows for running arbitrary command lines
# containing build system targets, which are built and replaced
# accordingly.
case run : {
if $(JAM_TARGETS[2]) {
JAM_TARGETS = [ RunCommandLine $(JAM_TARGETS[2-]) ] ;
} else {
Exit "\"jam run\" requires parameters!" ;
}
}
# A target starting with "@" is a build profile.
case @* : {
HAIKU_BUILD_PROFILE = [ Match "@(.*)" : $(JAM_TARGETS[1]) ] ;
HAIKU_BUILD_PROFILE_ACTION = $(JAM_TARGETS[2]:E=build) ;
HAIKU_BUILD_PROFILE_PARAMETERS = $(JAM_TARGETS[3-]) ;
HAIKU_BUILD_PROFILE_DEFINED = ;
}
case * : {
# "update-image", "update-vmware-image", and "update-install"
# targets allow for updating only specific targets in the
# image/installation dir.
if $(JAM_TARGETS[1]) in update-image update-vmware-image
update-install {
SetUpdateHaikuImageOnly 1 ;
HAIKU_INCLUDE_IN_IMAGE on $(JAM_TARGETS[2-]) = 1 ;
if $(JAM_TARGETS[1]) = update-image {
JAM_TARGETS = haiku-image ;
} else if $(JAM_TARGETS[1]) = update-vmware-image {
JAM_TARGETS = haiku-vmware-image ;
} else {
JAM_TARGETS = install-haiku ;
}
}
}
}
}
}