• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #
2 #          Copyright Andrey Semashev 2007 - 2015.
3 # Distributed under the Boost Software License, Version 1.0.
4 #    (See accompanying file LICENSE_1_0.txt or copy at
5 #          http://www.boost.org/LICENSE_1_0.txt)
6 #
7 
8 import path ;
9 import configure ;
10 import ../../build/log-platform-config ;
11 
12 rule has-config-flag ( flag : properties * )
13 {
14     if ( "<define>$(flag)" in $(properties) || "<define>$(flag)=1" in $(properties) )
15     {
16         return 1 ;
17     }
18     else
19     {
20         return ;
21     }
22 }
23 
24 rule check-message-compiler ( properties * )
25 {
26     local result ;
27 
28     if <target-os>windows in $(properties)
29     {
30         if ! [ has-config-flag BOOST_LOG_WITHOUT_EVENT_LOG : $(properties) ]
31         {
32             local has_mc = [ configure.builds /boost/log/message-compiler//test-availability : $(properties) : message-compiler ] ;
33             if ! $(has_mc)
34             {
35                 result = <define>BOOST_LOG_WITHOUT_EVENT_LOG ;
36             }
37         }
38         else
39         {
40             # This branch is needed to fix building with MinGW
41             result = <define>BOOST_LOG_WITHOUT_EVENT_LOG ;
42         }
43     }
44     else
45     {
46         result = <define>BOOST_LOG_WITHOUT_EVENT_LOG ;
47     }
48 
49     return $(result) ;
50 }
51 
52 project
53     : requirements
54         <conditional>@log-platform-config.set-platform-defines
55         <conditional>@check-message-compiler
56 
57         <link>shared:<define>BOOST_ALL_DYN_LINK
58         <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS
59         <toolset>msvc:<define>_SCL_SECURE_NO_DEPRECATE
60         <toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS
61         <toolset>msvc:<define>_CRT_SECURE_NO_DEPRECATE
62         <toolset>msvc:<cxxflags>/bigobj
63         <toolset>msvc:<cxxflags>/wd4503 # decorated name length exceeded, name was truncated
64         <toolset>msvc:<cxxflags>/wd4456 # declaration of 'A' hides previous local declaration
65         <toolset>msvc:<cxxflags>/wd4459 # declaration of 'A' hides global declaration
66         <toolset>msvc:<cxxflags>/wd4003 # not enough actual parameters for macro 'X' - caused by BOOST_PP_IS_EMPTY and BOOST_PP_IS_BEGIN_PARENS which are used by Fusion
67         <toolset>intel-win:<define>_SCL_SECURE_NO_WARNINGS
68         <toolset>intel-win:<define>_SCL_SECURE_NO_DEPRECATE
69         <toolset>intel-win:<define>_CRT_SECURE_NO_WARNINGS
70         <toolset>intel-win:<define>_CRT_SECURE_NO_DEPRECATE
71         <toolset>darwin:<cxxflags>-ftemplate-depth-1024
72         <toolset>gcc:<cxxflags>-ftemplate-depth-1024
73         <toolset>gcc:<cxxflags>-fno-strict-aliasing  # avoids strict aliasing violations in other Boost components
74 
75         # Disable Intel warnings:
76         # warning #177: function "X" was declared but never referenced
77         # warning #780: using-declaration ignored -- it refers to the current namespace
78         # warning #2196: routine is both "inline" and "noinline"
79         # remark #1782: #pragma once is obsolete. Use #ifndef guard instead.
80         # remark #193: zero used for undefined preprocessing identifier "X"
81         # remark #304: access control not specified ("public" by default)
82         # remark #981: operands are evaluated in unspecified order
83         # remark #1418: external function definition with no prior declaration
84         # Mostly comes from Boost.Phoenix: warning #411: class "X" defines no constructor to initialize the following: reference member "Y"...
85         # warning #734: "X" (declared at line N of "file.hpp"), required for copy that was eliminated, is inaccessible
86         # warning #279: controlling expression is constant
87         <toolset>intel-win:<cxxflags>"/Qwd177,780,2196,1782,193,304,981,1418,411,734,279"
88         <toolset>intel-linux:<cxxflags>"-wd177,780,2196,1782,193,304,981,1418,411,734,279"
89         <toolset>intel-darwin:<cxxflags>"-wd177,780,2196,1782,193,304,981,1418,411,734,279"
90 
91         # Boost.Interprocess does not compile on Cygwin: https://github.com/boostorg/interprocess/issues/76
92         <target-os>cygwin:<define>BOOST_LOG_WITHOUT_IPC
93 
94         <library>/boost/log//boost_log
95         <library>/boost/log//boost_log_setup
96         <library>/boost/date_time//boost_date_time
97         <library>/boost/filesystem//boost_filesystem
98         <library>/boost/thread//boost_thread
99         <threading>multi
100     ;
101 
102 # Compiles each .cpp file in this directory into a separate executable
103 rule compile_all
104 {
105     #ECHO executing compile_all rule ;
106     local all_rules = ;
107     for local file in [ glob *.cpp ]
108     {
109         local exename = [ MATCH "([^.]*).cpp$" : [ path.basename $(file) ] ] ;
110         #ECHO "exename = $(exename)" ;
111         all_rules += [ exe $(exename) : $(file) ] ;
112     }
113 
114     #ECHO $(all_rules) ;
115     return $(all_rules) ;
116 }
117 
118 compile_all ;
119