1# Boost serialization Library Build Jamfile
2#  (C) Copyright Robert Ramey 2002-2004.
3#  Use, modification, and distribution are subject to the
4#  Boost Software License, Version 1.0. (See accompanying file
5#  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6#
7#  See http://www.boost.org/libs/serialization for the library home page.
8
9project boost/serialization
10    : source-location ../src
11    : requirements
12      <conditional>@include-spirit
13;
14
15SPIRIT_ROOT = [ modules.peek : SPIRIT_ROOT ] ;
16rule include-spirit ( properties * )
17{
18    local old-compiler ;
19    if <toolset>borland in $(properties)
20    {
21        if ! <toolset-borland:version>6.1.0 in $(properties)
22        {
23            old-compiler = true ;
24        }
25
26    }
27    else if <toolset>msvc in $(properties)
28    {
29        if <toolset-msvc:version>6.5 in $(properties)
30          || <toolset-msvc:version>7.0 in $(properties)
31        {
32            old-compiler = true ;
33        }
34    }
35
36    local result ;
37    if $(old-compiler)
38    {
39        if $(SPIRIT_ROOT)
40        {
41            # note - we can't use <include>$(SPIRIT_ROOT) because
42            # it puts -I$(SPIRIT_ROOT) AFTER the "../../.." in the command line.
43            # so use these instead
44            result = <cxxflags>-I$(SPIRIT_ROOT) ;
45        }
46        else
47        {
48            echo **** spirit 1.6x required to build library with this compiler **** ;
49            result = <build>no ;
50        }
51    }
52    return $(result) ;
53}
54
55SOURCES =
56    archive_exception
57    basic_archive
58    basic_iarchive
59    basic_iserializer
60    basic_oarchive
61    basic_oserializer
62    basic_pointer_iserializer
63    basic_pointer_oserializer
64    basic_serializer_map
65    basic_text_iprimitive
66    basic_text_oprimitive
67    basic_xml_archive
68    binary_iarchive
69    binary_oarchive
70    extended_type_info
71    extended_type_info_typeid
72    extended_type_info_no_rtti
73    polymorphic_iarchive
74    polymorphic_oarchive
75    stl_port
76    text_iarchive
77    text_oarchive
78    polymorphic_text_iarchive
79    polymorphic_text_oarchive
80    polymorphic_binary_iarchive
81    polymorphic_binary_oarchive
82    polymorphic_xml_iarchive
83    polymorphic_xml_oarchive
84    void_cast
85    xml_grammar
86    xml_iarchive
87    xml_archive_exception
88    codecvt_null
89 ;
90
91SOURCES_HAS_STD_LOCALE =
92    xml_oarchive
93    utf8_codecvt_facet
94;
95
96WSOURCES =
97    basic_text_wiprimitive
98    basic_text_woprimitive
99    text_wiarchive
100    text_woarchive
101    polymorphic_text_wiarchive
102    polymorphic_text_woarchive
103    xml_wgrammar
104    xml_wiarchive
105    xml_woarchive
106    polymorphic_xml_wiarchive
107    polymorphic_xml_woarchive
108;
109
110rule has-config-flag ( flag : properties * )
111{
112    if ( "<define>$(flag)" in $(properties) || "<define>$(flag)=1" in $(properties) )
113    {
114        return 1 ;
115    }
116    else
117    {
118        return ;
119    }
120}
121
122rule select-define-specific-sources ( properties * )
123{
124    local result ;
125    if ! [ has-config-flag BOOST_NO_STD_LOCALE : $(properties) ]
126    {
127        result += <source>$(SOURCES_HAS_STD_LOCALE).cpp ;
128    }
129
130    #ECHO additional sources $(result) ;
131
132    return $(result) ;
133}
134
135rule should-build-wserialization ( properties * )
136{
137    local result ;
138    if [ has-config-flag BOOST_NO_STD_LOCALE : $(properties) ]
139    {
140        result += <build>no ;
141    }
142
143    #ECHO should build wserialization $(result) ;
144
145    return $(result) ;
146}
147
148lib boost_serialization
149    : ## sources ##
150     $(SOURCES).cpp
151    : ## requirements ##
152    <conditional>@select-define-specific-sources
153    <toolset>msvc:<cxxflags>/Gy
154    <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS
155    <toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS
156    <toolset>clang:<cxxflags>"-fvisibility=hidden -fvisibility-inlines-hidden"
157    <toolset>gcc:<cxxflags>"-fvisibility=hidden -fvisibility-inlines-hidden"
158    <toolset>darwin:<cxxflags>"-fvisibility=hidden -fvisibility-inlines-hidden"
159    <toolset>gcc:<cxxflags>"-ftemplate-depth-255"
160    <toolset>clang:<cxxflags>"-ftemplate-depth-255"
161    <toolset>darwin:<cxxflags>"-ftemplate-depth-255"
162    <link>shared:<define>BOOST_SERIALIZATION_DYN_LINK=1
163    ;
164
165lib boost_wserialization
166    : $(WSOURCES).cpp boost_serialization
167    :
168    <conditional>@should-build-wserialization
169    <toolset>msvc:<cxxflags>/Gy
170    <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS
171    <toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS
172    <toolset>clang:<cxxflags>"-fvisibility=hidden -fvisibility-inlines-hidden"
173    <toolset>gcc:<cxxflags>"-fvisibility=hidden -fvisibility-inlines-hidden"
174    <toolset>darwin:<cxxflags>"-fvisibility=hidden -fvisibility-inlines-hidden"
175    <toolset>gcc:<cxxflags>"-ftemplate-depth-255"
176    <toolset>clang:<cxxflags>"-ftemplate-depth-255"
177    <toolset>darwin:<cxxflags>"-ftemplate-depth-255"
178    # note: both serialization and wserialization are conditioned on the this
179    # switch - don't change it to BOOST_WSERIALIZATION_DYN_LINK
180    <link>shared:<define>BOOST_SERIALIZATION_DYN_LINK=1
181    ;
182
183boost-install boost_serialization boost_wserialization ;
184