summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Dimov <pdimov@gmail.com>2019-01-09 21:26:24 +0200
committerPeter Dimov <pdimov@gmail.com>2019-01-09 21:26:24 +0200
commit47ef674f752ad2cfeb581665cbea18ee6faecd2e (patch)
tree4bb16c6f8c7f3663f9f24a699cd23baef6faca37
parentda4606f47f65a4a20d43b4e9c4e4046e76414fe3 (diff)
downloadboost-47ef674f752ad2cfeb581665cbea18ee6faecd2e.tar.gz
Apply develop changes to Jamroot, boostcpp.jam
-rw-r--r--Jamroot52
-rw-r--r--boostcpp.jam159
2 files changed, 59 insertions, 152 deletions
diff --git a/Jamroot b/Jamroot
index 0a9308d25e..e07701e4cd 100644
--- a/Jamroot
+++ b/Jamroot
@@ -19,23 +19,28 @@
# ======= configured locations (below).
#
# --prefix=<PREFIX> Install architecture independent files here.
-# Default; C:\Boost on Win32
-# Default; /usr/local on Unix. Linux, etc.
+# Default: C:\Boost on Windows
+# Default: /usr/local on Unix, Linux, etc.
#
# --exec-prefix=<EPREFIX> Install architecture dependent files here.
-# Default; <PREFIX>
+# Default: <PREFIX>
#
-# --libdir=<DIR> Install library files here.
-# Default; <EPREFIX>/lib
+# --libdir=<LIBDIR> Install library files here.
+# Default: <EPREFIX>/lib
#
# --includedir=<HDRDIR> Install header files here.
-# Default; <PREFIX>/include
+# Default: <PREFIX>/include
+#
+# --cmakedir=<CMAKEDIR> Install CMake configuration files here.
+# Default: <LIBDIR>/cmake
+#
+# --no-cmake-config Do not install CMake configuration files.
#
# stage Build and install only compiled library files to the
# ===== stage directory.
#
# --stagedir=<STAGEDIR> Install library files here
-# Default; ./stage
+# Default: ./stage
#
# Other Options:
#
@@ -135,6 +140,7 @@ import "class" : new ;
import property-set ;
import threadapi-feature ;
import option ;
+import tools/boost_install/boost-install ;
path-constant BOOST_ROOT : . ;
constant BOOST_VERSION : 1.70.0 ;
@@ -179,6 +185,7 @@ project boost
: usage-requirements <include>.
: default-build
<visibility>hidden
+ <threading>multi
: build-dir bin.v2
;
@@ -286,31 +293,18 @@ if [ path.exists $(BOOST_ROOT)/libs/wave/tool/build ]
use-project /boost/libs/wave/tool : libs/wave/tool/build ;
}
+# Make the boost-install rule visible in subprojects
+
# This rule should be called from libraries' Jamfiles and will create two
# targets, "install" and "stage", that will install or stage that library. The
# --prefix option is respected, but --with and --without options, naturally, are
# ignored.
#
# - libraries -- list of library targets to install.
-#
+
rule boost-install ( libraries * )
{
- package.install install
- : <dependency>/boost//install-proper-headers $(install-requirements)
- : # No binaries
- : $(libraries)
- : # No headers, it is handled by the dependency.
- ;
-
- local stage-locate = [ option.get stagedir : $(BOOST_ROOT)/stage ] ;
-
- install stage : $(libraries) : <location>$(stage-locate)/lib ;
-
- module [ CALLER_MODULE ]
- {
- explicit stage ;
- explicit install ;
- }
+ boost-install.boost-install $(libraries) ;
}
# Creates a library target, adding autolink support and also creates
@@ -329,14 +323,6 @@ rule boost-lib ( name : sources * : requirements * : default-build * : usage-req
}
-headers =
- # The .SUNWCCh files are present in tr1 include directory and have to be
- # installed (see http://lists.boost.org/Archives/boost/2007/05/121430.php).
- [ path.glob-tree $(BOOST_ROOT)/boost : *.hpp *.ipp *.h *.inc *.SUNWCCh : CVS .svn ]
- [ path.glob-tree $(BOOST_ROOT)/boost/compatibility/cpp_c_headers : c* : CVS .svn ]
- [ path.glob $(BOOST_ROOT)/boost/tr1/tr1 : * : bcc32 sun CVS .svn ]
- ;
-
# Declare special top-level targets that build and install the desired variants
# of the libraries.
-boostcpp.declare-targets $(all-libraries) : $(headers) : $(all-headers) ;
+boostcpp.declare-targets $(all-libraries) ;
diff --git a/boostcpp.jam b/boostcpp.jam
index 5a6f296cff..efc41c1ed8 100644
--- a/boostcpp.jam
+++ b/boostcpp.jam
@@ -109,7 +109,16 @@ if $(layout) = system && $(build-type) = complete
# Possible stage only location.
stage-locate = [ option.get stagedir ] ;
-stage-locate ?= stage ;
+
+if $(stage-locate)
+{
+ stage-locate = [ path.root [ path.make $(stage-locate) ] [ path.pwd ] ] ;
+}
+else
+{
+ stage-locate = $(BOOST_ROOT)/stage ;
+}
+
BOOST_STAGE_LOCATE = $(stage-locate) ;
# Custom build ID.
@@ -213,9 +222,27 @@ rule tag ( name : type ? : property-set )
rule python-tag ( name : type ? : property-set )
{
local result = $(name) ;
- if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB && $(PYTHON_ID)
+
+ if $(type) in STATIC_LIB SHARED_LIB IMPORT_LIB
{
- result = $(result)-$(PYTHON_ID) ;
+ # Add Python version suffix
+
+ local version = [ $(property-set).get <python> ] ;
+
+ local major-minor = [ MATCH "^([0-9]+)\.([0-9]+)" : $(version) ] ;
+ local suffix = $(major-minor:J="") ;
+
+ if $(suffix)
+ {
+ result = $(result)$(suffix) ;
+ }
+
+ # Add PYTHON_ID if supplied
+
+ if $(PYTHON_ID)
+ {
+ result = $(result)-$(PYTHON_ID) ;
+ }
}
# forward to the boost tagging rule
@@ -231,118 +258,14 @@ rule python-tag ( name : type ? : property-set )
#
################################################################################
-rule filtered-target ( name : message + : sources + : requirements * )
+rule declare_install_and_stage_proper_targets ( libraries * )
{
- message $(name)-message : warning\: $(message) ;
- alias $(name) : $(sources) : $(requirements) ;
- alias $(name) : $(name)-message ;
-
local p = [ project.current ] ;
- $(p).mark-target-as-explicit $(name) ;
- $(p).mark-target-as-explicit $(name)-message ;
-}
-rule declare_install_and_stage_proper_targets ( libraries * : headers * : modular-headers * )
-{
- local p = [ project.current ] ;
- for local l in $(libraries)
- {
- if $(l) = locale
- {
- filtered-target $(l)-for-install :
- Skipping Boost.Locale library with threading=single. :
- libs/$(l)/build : <threading>multi ;
- }
- else if $(l) = wave
- {
- filtered-target $(l)-for-install :
- Skipping Boost.Wave library with threading=single. :
- libs/$(l)/build : <threading>multi ;
- }
- else if $(l) = thread
- {
- filtered-target $(l)-for-install :
- Skipping Boost.Thread library with threading=single. :
- libs/$(l)/build : <threading>multi ;
- }
- else
- {
- alias $(l)-for-install : libs/$(l)/build ;
- $(p).mark-target-as-explicit $(l)-for-install ;
- }
- }
- local library-targets = $(libraries)-for-install ;
-
- local install-requirements ;
-
- if $(layout-versioned)
- {
- install-requirements +=
- <install-header-subdir>boost-$(BOOST_VERSION_TAG)/boost ;
- }
- else
- {
- install-requirements += <install-header-subdir>boost ;
- }
-
- if [ os.name ] = NT
- {
- install-requirements += <install-default-prefix>C:/Boost ;
- }
- else
- {
- install-requirements += <install-default-prefix>/usr/local ;
- }
-
- p = [ project.current ] ;
-
- # These headers will be installed from the modular
- # layout, and should be ignored in the global boost/
- local skip-headers ;
- # Install modular headers.
- for local lib in $(modular-headers)
- {
- local header-root = $(BOOST_ROOT)/libs/$(lib)/include/boost ;
- local lib-headers =
- [ path.glob-tree $(header-root) : *.hpp *.ipp *.h *.inc *.SUNWCCh : CVS .svn ]
- [ path.glob-tree $(header-root)/compatibility/cpp_c_headers : c* : CVS .svn ]
- [ path.glob $(header-root)/tr1/tr1 : * : bcc32 sun CVS .svn ]
- ;
- skip-headers += [ sequence.transform path.relative-to [ path.make $(header-root) ] : $(lib-headers) ] ;
- package.install install-$(lib)-headers
- : <install-source-root>$(header-root)
- $(install-requirements)
- <install-no-version-symlinks>on
- : # binaries
- : # libraries
- : $(lib-headers)
- ;
- $(p).mark-target-as-explicit install-$(lib)-headers ;
- }
-
- # Filter out headers that were created by b2 headers
- local header-root = [ path.make $(BOOST_ROOT)/boost ] ;
- headers = [ set.difference $(headers) : $(header-root)/$(skip-headers) ] ;
-
- # Complete install.
- package.install install-proper
- : <install-source-root>$(BOOST_ROOT)/boost
- $(install-requirements)
- <install-no-version-symlinks>on
-
- :
- : $(libraries)-for-install
- : $(headers)
- ;
+ alias install-proper : libs/$(libraries)/build//install ;
$(p).mark-target-as-explicit install-proper ;
- # Install just library.
- install stage-proper
- : $(libraries)-for-install
- : <location>$(stage-locate)/lib
- <install-dependencies>on <install-type>LIB
- <install-no-version-symlinks>on
- ;
+ alias stage-proper : libs/$(libraries)/build//stage ;
$(p).mark-target-as-explicit stage-proper ;
}
@@ -488,13 +411,13 @@ class top-level-target : alias-target-class
}
}
-rule declare_top_level_targets ( libraries * : headers * : modular-headers * )
+rule declare_top_level_targets ( libraries * )
{
- declare_install_and_stage_proper_targets $(libraries) : $(headers) : $(modular-headers) ;
+ declare_install_and_stage_proper_targets $(libraries) ;
targets.create-metatarget top-level-target : [ project.current ]
: install
- : install-$(modular-headers)-headers install-proper
+ : install-proper
;
targets.create-metatarget top-level-target : [ project.current ]
: stage
@@ -513,9 +436,6 @@ rule declare_top_level_targets ( libraries * : headers * : modular-headers * )
}
-stage-abs = [ path.native [ path.root $(stage-locate)/lib [ path.pwd ] ] ] ;
-
-
################################################################################
#
# 4. Add hook to report configuration before the build, and confirmation with
@@ -542,7 +462,6 @@ rule pre-build ( )
IMPORT $(__name__) : pre-build : : $(__name__).pre-build ;
build-system.set-pre-build-hook $(__name__).pre-build ;
-# FIXME: Revise stage_abs.
rule post-build ( ok ? )
{
if forward in [ modules.peek : top-level-targets ]
@@ -550,6 +469,8 @@ rule post-build ( ok ? )
if $(ok)
{
local include-path = [ path.native $(BOOST_ROOT) ] ;
+ local stage-abs = [ path.native $(stage-locate)/lib ] ;
+
ECHO "
The Boost C++ Libraries were successfully built!
@@ -623,7 +544,7 @@ rule libraries-to-install ( existing-libs * )
}
}
-rule declare-targets ( all-libraries * : headers * : modular-headers * )
+rule declare-targets ( all-libraries * )
{
configure.register-components $(all-libraries) ;
@@ -641,7 +562,7 @@ rule declare-targets ( all-libraries * : headers * : modular-headers * )
EXIT ;
}
- declare_top_level_targets $(libraries) : $(headers) : $(modular-headers) ;
+ declare_top_level_targets $(libraries) ;
}
# Returns the properties identifying the toolset. We'll use them