s3: libsmbclient: Add missing talloc stackframe.
[sfrench/samba-autobuild/.git] / third_party / waf / wafadmin / Tools / gxx.py
1 #!/usr/bin/env python
2 # encoding: utf-8
3 # Thomas Nagy, 2006 (ita)
4 # Ralf Habacker, 2006 (rh)
5 # Yinon Ehrlich, 2009
6
7 import os, sys
8 import Configure, Options, Utils
9 import ccroot, ar
10 from Configure import conftest
11
12 @conftest
13 def find_gxx(conf):
14         cxx = conf.find_program(['g++', 'c++'], var='CXX', mandatory=True)
15         cxx = conf.cmd_to_list(cxx)
16         ccroot.get_cc_version(conf, cxx, gcc=True)
17         conf.env.CXX_NAME = 'gcc'
18         conf.env.CXX      = cxx
19
20 @conftest
21 def gxx_common_flags(conf):
22         v = conf.env
23
24         # CPPFLAGS CXXDEFINES _CXXINCFLAGS _CXXDEFFLAGS
25         v['CXXFLAGS_DEBUG'] = ['-g']
26         v['CXXFLAGS_RELEASE'] = ['-O2']
27
28         v['CXX_SRC_F']           = ''
29         v['CXX_TGT_F']           = ['-c', '-o', ''] # shell hack for -MD
30         v['CPPPATH_ST']          = '-I%s' # template for adding include paths
31
32         # linker
33         if not v['LINK_CXX']: v['LINK_CXX'] = v['CXX']
34         v['CXXLNK_SRC_F']        = ''
35         v['CXXLNK_TGT_F']        = ['-o', ''] # shell hack for -MD
36
37         v['LIB_ST']              = '-l%s' # template for adding libs
38         v['LIBPATH_ST']          = '-L%s' # template for adding libpaths
39         v['STATICLIB_ST']        = '-l%s'
40         v['STATICLIBPATH_ST']    = '-L%s'
41         v['RPATH_ST']            = '-Wl,-rpath,%s'
42         v['CXXDEFINES_ST']       = '-D%s'
43
44         v['SONAME_ST']           = '-Wl,-h,%s'
45         v['SHLIB_MARKER']        = '-Wl,-Bdynamic'
46         v['STATICLIB_MARKER']    = '-Wl,-Bstatic'
47         v['FULLSTATIC_MARKER']   = '-static'
48
49         # program
50         v['program_PATTERN']     = '%s'
51
52         # shared library
53         v['shlib_CXXFLAGS']      = ['-fPIC', '-DPIC'] # avoid using -DPIC, -fPIC aleady defines the __PIC__ macro
54         v['shlib_LINKFLAGS']     = ['-shared']
55         v['shlib_PATTERN']       = 'lib%s.so'
56
57         # static lib
58         v['staticlib_LINKFLAGS'] = ['-Wl,-Bstatic']
59         v['staticlib_PATTERN']   = 'lib%s.a'
60
61         # osx stuff
62         v['LINKFLAGS_MACBUNDLE'] = ['-bundle', '-undefined', 'dynamic_lookup']
63         v['CCFLAGS_MACBUNDLE']   = ['-fPIC']
64         v['macbundle_PATTERN']   = '%s.bundle'
65
66 @conftest
67 def gxx_modifier_win32(conf):
68         v = conf.env
69         v['program_PATTERN']     = '%s.exe'
70
71         v['shlib_PATTERN']       = '%s.dll'
72         v['implib_PATTERN']      = 'lib%s.dll.a'
73         v['IMPLIB_ST']           = '-Wl,--out-implib,%s'
74
75         dest_arch = v['DEST_CPU']
76         v['shlib_CXXFLAGS'] = []
77
78         v.append_value('shlib_CXXFLAGS', '-DDLL_EXPORT') # TODO adding nonstandard defines like this DLL_EXPORT is not a good idea
79
80         # Auto-import is enabled by default even without this option,
81         # but enabling it explicitly has the nice effect of suppressing the rather boring, debug-level messages
82         # that the linker emits otherwise.
83         v.append_value('LINKFLAGS', '-Wl,--enable-auto-import')
84
85 @conftest
86 def gxx_modifier_cygwin(conf):
87         gxx_modifier_win32(conf)
88         v = conf.env
89         v['shlib_PATTERN']       = 'cyg%s.dll'
90         v.append_value('shlib_LINKFLAGS', '-Wl,--enable-auto-image-base')
91
92 @conftest
93 def gxx_modifier_darwin(conf):
94         v = conf.env
95         v['shlib_CXXFLAGS']      = ['-fPIC', '-compatibility_version', '1', '-current_version', '1']
96         v['shlib_LINKFLAGS']     = ['-dynamiclib']
97         v['shlib_PATTERN']       = 'lib%s.dylib'
98
99         v['staticlib_LINKFLAGS'] = []
100
101         v['SHLIB_MARKER']        = ''
102         v['STATICLIB_MARKER']    = ''
103         v['SONAME_ST']           = ''
104
105 @conftest
106 def gxx_modifier_aix(conf):
107         v = conf.env
108         v['program_LINKFLAGS']   = ['-Wl,-brtl']
109
110         v['shlib_LINKFLAGS']     = ['-shared', '-Wl,-brtl,-bexpfull']
111
112         v['SHLIB_MARKER']        = ''
113
114 @conftest
115 def gxx_modifier_openbsd(conf):
116         conf.env['SONAME_ST'] = []
117
118 @conftest
119 def gxx_modifier_platform(conf):
120         # * set configurations specific for a platform.
121         # * the destination platform is detected automatically by looking at the macros the compiler predefines,
122         #   and if it's not recognised, it fallbacks to sys.platform.
123         dest_os = conf.env['DEST_OS'] or Utils.unversioned_sys_platform()
124         gxx_modifier_func = globals().get('gxx_modifier_' + dest_os)
125         if gxx_modifier_func:
126                         gxx_modifier_func(conf)
127
128 def detect(conf):
129         conf.find_gxx()
130         conf.find_cpp()
131         conf.find_ar()
132         conf.gxx_common_flags()
133         conf.gxx_modifier_platform()
134         conf.cxx_load_tools()
135         conf.cxx_add_flags()
136         conf.link_add_flags()