2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-15 13:02:11 +00:00
Files
build/kernel/bootstrap.jam
Dave Abrahams d9d8785236 Enabled sorting of BBv2 modules into subdirectories
build-system.jam - moved from tools/build/new to tools/build

boost-build.jam - moved from tools/build/new to tools/build/kernel
bootstrap.jam
errors.jam
modules.jam

test/BoostBuild.py   - adjusted for the above modification
test/boost-build.jam

project-root.jam - renamed to "project-roots.jam" to avoid confusion
                   and conflict with the user's project-root.jam file

project.jam                           - adjusted for the above renaming
test/project-test1/project-test1.jam

type.jam - broke a circular module dependency


[SVN r18575]
2003-05-28 01:33:38 +00:00

96 lines
3.3 KiB
Plaintext
Executable File

# (C) Copyright David Abrahams 2001. Permission to copy, use, modify, sell and
# distribute this software is granted provided this copyright notice appears in
# all copies. This software is provided "as is" without express or implied
# warranty, and with no claim as to its suitability for any purpose.
# First of all, check the jam version
if $(JAM_VERSION:J="") < 030105
{
ECHO "error: Boost.Jam version 3.1.5 or later required" ;
EXIT ;
}
# Bootstrap the module system. Then bring the import rule into the global module.
#
SEARCH on <module@>modules.jam = $(.bootstrap-file:D) ;
module modules { include <module@>modules.jam ; }
IMPORT modules : import : : import ;
{
# Add module subdirectories to the BOOST_BUILD_PATH, which allows
# us to make an incremental refactoring step by moving modules to
# the appropriate subdirectories, thereby achieving some physical
# separation of different layers without changing all of our code
# to specify subdirectories in import statements or use an extra
# level of qualification on imported names.
local subdirs =
kernel # only the most-intrinsic modules: modules, errors
util # low-level substrate: string/number handling, etc.
core # essential elements of the build system architecture
tools # toolsets for handling specific build jobs and targets.
new # until we get everything sorted out, there is
# still some code here
. # build-system.jam lives here
;
local whereami = $(.bootstrap-file:D) ;
BOOST_BUILD_PATH += $(whereami:D)/$(subdirs) ;
}
# Reload the modules, to clean up things. The modules module can tolerate
# being included twice.
#
import modules ;
# Check command-line args as soon as possible. This is first action,
# so that we can interrupt the regular build process if the user is
# asking for help.
for local arg in [ MATCH ^--([^-=].*) : $(ARGV) ]
{
local split = [ MATCH ^([^-=]+([^=]*))(=?)(.*)$ : $(arg) ] ;
local full-name = $(split[1]) ;
local prefix = $(split[2]) ;
local value ;
if $(split[3])
{
value = $(split[4]) ;
}
# look in options subdirectories of BOOST_BUILD_PATH for modules
# matching the full option name and then its prefix.
local plugin-dir = options ;
local option-files = [
GLOB $(plugin-dir:D=$(BOOST_BUILD_PATH)) : $(full-name).jam $(prefix).jam
] ;
if $(option-files)
{
# load the file into a module named for the option
local f = $(option-files[1]) ;
local module-name = --$(f:D=:S=) ;
modules.load $(module-name) : $(f:D=) : $(f:D) ;
# if there's a process rule, call it with the full option name
# and its value (if any). If there was no "=" in the option,
# the value will be empty.
if process in [ RULENAMES $(module-name) ]
{
modules.call-in $(module-name) : process --$(full-name) : $(value) ;
}
}
}
# Allow users to override the build system file from the
# command-line (mostly for testing)
local build-system = [ MATCH --build-system=(.*) : $(ARGV) ] ;
build-system ?= build-system ;
# Use last element in case of multiple command-line options
import $(build-system[-2]) ;