summaryrefslogtreecommitdiffstats
path: root/src/boost/tools/build/Jamroot.jam
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/tools/build/Jamroot.jam')
-rw-r--r--src/boost/tools/build/Jamroot.jam267
1 files changed, 267 insertions, 0 deletions
diff --git a/src/boost/tools/build/Jamroot.jam b/src/boost/tools/build/Jamroot.jam
new file mode 100644
index 000000000..cd6a49e86
--- /dev/null
+++ b/src/boost/tools/build/Jamroot.jam
@@ -0,0 +1,267 @@
+# Copyright 2019 Rene Rivera
+# Copyright 2017 Steven Watanabe
+# Copyright 2016 Vladimir Prus
+# Copyright 2017 Edward Diener
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt)
+
+import "class" : new ;
+import bison ;
+import errors ;
+import feature ;
+import indirect ;
+import os ;
+# import package ;
+import path ;
+import set ;
+import stage : add-install-dir ;
+import toolset ;
+import type ;
+import virtual-target ;
+
+path-constant SELF : . ;
+
+project b2
+ : build-dir .build
+ : requirements
+ <cxxstd>11
+ <toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS=1
+ <toolset>msvc:<define>_CRT_NONSTDC_NO_DEPRECATE=1
+ ;
+
+#|
+Build the engine and its dependencies outside of the simple core build scripts.
+This allows us to keep the core build scripts as simple as possible. And lets
+us support more functionality for development of the engine core.
+|#
+
+#|
+Define custom yyacc tool.
+|#
+
+feature.feature yyacc : : dependency free ;
+toolset.flags yyacc TOOL <yyacc> ;
+
+exe yyacc
+ : src/engine/yyacc.cpp
+ : ;
+explicit yyacc ;
+
+rule yyacc-gen ( project name : property-set : sources * )
+{
+ local relevant = [ toolset.relevant $(__name__).yyacc ] ;
+ local a = [ new action $(sources[1]) : $(__name__).yyacc : [ $(property-set).add $(relevant) ] ] ;
+ local targets ;
+ for local n in $(name:S=).y $(name:S=)tab.h
+ {
+ targets += [ virtual-target.register
+ [ new file-target $(n) exact : [ type.type $(n) ]
+ : $(project) : $(a)
+ ] ] ;
+ }
+ return $(targets) ;
+}
+
+actions yyacc bind TOOL
+{
+ "$(TOOL)" "$(<)" "$(>)"
+}
+
+generate jamgram.y
+ : src/engine/jamgram.yy
+ : <generating-rule>@yyacc-gen
+ <location>src/engine
+ <yyacc>yyacc <dependency>yyacc
+ ;
+explicit jamgram.y ;
+
+#|
+Define grammar translation with Bison.
+|#
+
+BISON = [ os.environ BISON ] ;
+BISON ?= bison ;
+local BISON_IN_PATH = [ path.glob [ os.executable-path ] : $(BISON[1]) $(BISON[1]).* ] ;
+
+rule grammar ( target : source : properties * )
+{
+ # LOCATE on $(target) = $(source:D) ;
+ BISON on $(target) = $(BISON) ;
+}
+
+actions grammar
+{
+ "$(BISON)" --yacc --defines -o "$(<[1])" "$(>)"
+}
+
+if $(BISON_IN_PATH)
+{
+ make jamgram.cpp
+ : src/engine/jamgram.y
+ : @grammar
+ : <dependency>jamgram.y
+ <location>src/engine ;
+}
+else
+{
+ errors.warning "Bison generator program '$(BISON:J= )' not found. Skipping grammar build." ;
+ alias jamgram.cpp
+ : src/engine/jamgram.cpp ;
+}
+explicit jamgram.cpp ;
+
+#|
+Define the b2 executable. Sources are based on platform.
+TODO: Make platform specific source be no-ops when not needed.
+|#
+
+local python-exe = [ MATCH --with-python=(.*) : [ modules.peek : ARGV ] ] ;
+local python-include ;
+local python-ldlib ;
+if $(python-exe)
+{
+ python-include = [ SHELL
+ "$(python-exe) -c \"import sysconfig; print(sysconfig.get_path('include'));\""
+ : strip-eol ] ;
+ python-libdir = [ SHELL
+ "$(python-exe) -c \"import sysconfig; import os.path; print(sysconfig.get_config_var('LIBDIR'));\""
+ : strip-eol ] ;
+ python-ldlib = [ MATCH ".*(python.*)" : [ SHELL
+ "$(python-exe) -c \"import sysconfig; import os.path; print(sysconfig.get_config_var('LIBRARY'));\""
+ : strip-eol ] ] ;
+ python-ldlib = $(python-ldlib:S=) ;
+
+ lib python
+ :
+ : <name>$(python-ldlib) <search>$(python-libdir)
+ :
+ : <include>$(python-include) <define>HAVE_PYTHON ;
+}
+else
+{
+ alias python ;
+}
+
+obj jamgram.obj
+ : jamgram.cpp
+ : <toolset>gcc:<cxxflags>-Wno-free-nonheap-object
+ ;
+explicit jamgram.obj ;
+
+local b2_src =
+ [ glob src/engine/*.cpp src/engine/modules/*.cpp :
+ src/engine/*nt.cpp src/engine/*unix.cpp src/engine/*vms.cpp
+ src/engine/yyacc.cpp src/engine/mkjambase.cpp
+ src/engine/check_*.cpp
+ src/engine/jamgram.cpp
+ ] ;
+local b2_src_nt = [ glob src/engine/*nt.cpp ] ;
+local b2_src_unix = [ glob src/engine/*unix.cpp ] ;
+local b2_src_vms = [ glob src/engine/*vms.cpp ] ;
+local unix_os = [ set.difference [ feature.values <target-os> ] : windows vms ] ;
+
+exe b2
+ : $(b2_src)
+ jamgram.obj
+ python
+ : <target-os>windows:<source>$(b2_src_nt)
+ <target-os>vms:<source>$(b2_src_vms)
+ <target-os>$(unix_os):<source>$(b2_src_unix)
+ <toolset>msvc:<find-static-library>kernel32
+ <toolset>msvc:<find-static-library>advapi32
+ <toolset>msvc:<find-static-library>user32
+ ;
+explicit b2 ;
+
+#|
+Installation of the engine, build, and example files.
+|#
+
+feature.feature b2-install-layout : standard portable : incidental propagated ;
+
+add-install-dir b2prefix-standard : : prefix ;
+add-install-dir b2bindir-standard : : bindir ;
+add-install-dir b2coredir-standard : boost-build/src : datarootdir ;
+add-install-dir b2examplesdir-standard : boost-build/examples : datarootdir ;
+
+add-install-dir b2prefix-portable : : prefix ;
+add-install-dir b2bindir-portable : : b2prefix-portable ;
+add-install-dir b2coredir-portable : .b2 : b2prefix-portable ;
+add-install-dir b2examplesdir-portable : .b2/examples : b2prefix-portable ;
+
+local ext = "" ;
+if [ os.on-windows ] || [ os.on-vms ]
+{
+ ext = ".exe" ;
+}
+
+install b2-engine
+ : $(SELF)/src/engine/b2$(ext)
+ : <b2-install-layout>standard:<location>(b2bindir-standard)
+ <b2-install-layout>portable:<location>(b2bindir-portable)
+ ;
+explicit b2-engine ;
+
+local examples ;
+for local e in [ glob-tree-ex $(SELF)/example : * : . .svn ]
+{
+ if [ CHECK_IF_FILE [ path.native $(e) ] ]
+ {
+ examples += $(e) ;
+ }
+}
+install b2-examples
+ : # What to install
+ $(examples)
+ : # What is the root of the directory
+ <install-source-root>example
+ # Which subdir of $prefix/share
+ <b2-install-layout>standard:<location>(b2examplesdir-standard)
+ <b2-install-layout>portable:<location>(b2examplesdir-portable)
+ ;
+explicit b2-examples ;
+
+local .core-sources =
+ $(SELF)/src/build-system.jam
+ [ path.glob-tree $(SELF)/src/build : *.jam ]
+ [ path.glob-tree $(SELF)/src/contrib : *.jam ]
+ [ path.glob-tree $(SELF)/src/kernel : *.jam ]
+ [ path.glob-tree $(SELF)/src/options : *.jam ]
+ [ path.glob-tree $(SELF)/src/util : *.jam ]
+ [ path.glob-tree $(SELF)/src/tools : *.jam *.xml *.xsl *.doxyfile *.hpp doxproc.py ]
+ ;
+if $(python-exe)
+{
+ .core-sources +=
+ [ path.glob-tree $(SELF)/src/build : *.py ]
+ [ path.glob-tree $(SELF)/src/contrib : *.py ]
+ [ path.glob-tree $(SELF)/src/kernel : *.py ]
+ [ path.glob-tree $(SELF)/src/options : *.py ]
+ [ path.glob-tree $(SELF)/src/util : *.py ]
+ [ path.glob-tree $(SELF)/src/tools : *.py : doxproc.py ]
+ ;
+}
+
+install b2-core
+ : # What to install
+ $(.core-sources)
+ : # What is the root of the directory
+ <install-source-root>src
+ # Which subdir of $prefix/share
+ <b2-install-layout>standard:<location>(b2coredir-standard)
+ <b2-install-layout>portable:<location>(b2coredir-portable)
+ ;
+explicit b2-core ;
+
+#|
+Only install example files when requested to avoid bloating install footprint.
+|#
+if --with-examples in [ modules.peek : ARGV ]
+{
+ alias install : b2-engine b2-core b2-examples ;
+}
+else
+{
+ alias install : b2-engine b2-core ;
+}
+explicit install ;