# 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 ... - 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 ; } } } } } }