source: trunk/SConstruct@ 3145

Last change on this file since 3145 was 3128, checked in by VincentMcIntyre, 8 years ago

asap/trunk - add -std=c++11 compilation flag since we started using the shared_ptr feature in r3121

File size: 7.1 KB
Line 
1import os
2import sys
3import distutils.sysconfig
4import platform
5import SCons
6
7# try to autodetect numpy
8def get_numpy_incdir():
9 try:
10 # try to find an egg
11 from pkg_resources import require
12 tmp = require("numpy")
13 import numpy
14 return numpy.__path__[0]+"/core/include"
15 except Exception:
16 # now try standard package
17 try:
18 import numpy
19 return numpy.__path__[0]+"/core/include"
20 except ImportError:
21 pass
22 return ""
23
24def get_libdir():
25 return os.path.basename(distutils.sysconfig.get_config_var('LIBDIR'))
26
27LIBDIR = 'lib' #get_libdir()
28
29EnsureSConsVersion(1,0,0)
30
31opts = Variables("options.cache")
32opts.AddVariables(
33 ("extraroot", "Addition tree to look for packages", None),
34 ("extraflags", "Additional build flags", None),
35 PathVariable("casacoreroot", "The location of casacore",
36 "/usr/local"),
37 BoolVariable("casacorestatic",
38 "Link statically against casacore",
39 False),
40 ("boostroot", "The root dir where boost is installed", None),
41 ("boostlib", "The name of the boost python library",
42 "boost_python"),
43 ("boostlibdir", "The boost library location", None),
44 ("boostincdir", "The boost header file location", None),
45 ("cfitsioroot",
46 "The root directory where cfistio is installed", None),
47 ("cfitsiolibdir", "The cfitsio library location", None),
48 ("cfitsiolib", "The cfitsio library name", "cfitsio"),
49 ("cfitsioincdir", "The cfitsio include location", None),
50 ("rpfitslib", "The rpfits library name", "rpfits"),
51 ("rpfitsroot",
52 "The root directory where rpfits is installed", None),
53 ("rpfitslibdir", "The rpfits library location", None),
54
55 ("pyraproot", "The root directory where libpyrap is installed",
56 None),
57 ("numpyincdir", "numpy header file directory",
58 get_numpy_incdir()),
59 BoolVariable("enable_pyrap",
60 "Use pyrap conversion library from system",
61 False),
62 ("pyraplib", "The name of the pyrap library", "pyrap"),
63 ("pyraplibdir", "The directory where libpyrap is installed",
64 None),
65 ("pyrapincdir", "The pyrap include location",
66 None),
67 EnumVariable("mode", "The type of build.", "release",
68 ["release","debug"], ignorecase=1),
69 EnumVariable("makedoc",
70 "Build the userguide in specified format",
71 "none",
72 ["none", "pdf", "html"], ignorecase=1),
73 BoolVariable("apps", "Build cpp apps", True),
74 BoolVariable("alma", "Enable alma specific functionality",
75 False),
76 )
77
78env = Environment( toolpath = ['./scons'],
79 tools = ["default", "utils", "casa"],
80 ENV = { 'PATH' : os.environ[ 'PATH' ],
81 'HOME' : os.environ[ 'HOME' ] },
82 options = opts)
83
84env.Help(opts.GenerateHelpText(env))
85env.SConsignFile()
86if not ( env.GetOption('clean') or env.GetOption('help') ):
87
88 conf = Configure(env)
89 if conf.env.get("extraroot", None):
90 conf.env.AddCustomPackage('extra')
91 conf.env.Append(CPPPATH=[distutils.sysconfig.get_python_inc()])
92 if not conf.CheckHeader("Python.h", language='c'):
93 Exit(1)
94 pylib = 'python'+distutils.sysconfig.get_python_version()
95 if env['PLATFORM'] == "darwin":
96 conf.env.Append(FRAMEWORKS=["Python"])
97 else:
98 if not conf.CheckLib(library=pylib, language='c'): Exit(1)
99
100 conf.env.AddCustomPackage('boost')
101 libname = conf.env["boostlib"]
102 if libname.find(".") > -1 and os.path.exists(libname):
103 conf.env.AppendUnique(LIBS=[env.File(libname)])
104 else:
105 if not conf.CheckLibWithHeader(libname,
106 'boost/python.hpp', language='c++'):
107 Exit(1)
108
109 if not conf.CheckLib("m"):
110 Exit(1)
111 # test for cfitsio
112 conf.env.AddCustomPackage('cfitsio')
113 libname = conf.env["cfitsiolib"]
114 if not conf.CheckHeader("fitsio.h"):
115 #SuSE is being special
116 conf.env.AppendUnique(CPPPATH=['/usr/include/libcfitsio0'])
117 if not conf.CheckHeader("fitsio.h"):
118 Exit(1)
119 if libname.find(".") > -1 and os.path.exists(libname):
120 conf.env.AppendUnique(LIBS=[env.File(libname)])
121 else:
122 if not conf.CheckLib(libname, language='c'):
123 Exit(1)
124
125 conf.env.AddCustomPackage('rpfits')
126 if not conf.CheckLibWithHeader(conf.env["rpfitslib"], "RPFITS.h",
127 language="c"):
128 Exit(1)
129
130 libpath = ""
131 for p in [conf.env["casacoreroot"], conf.env.get("extraroot", "")]:
132 pth = os.path.join(p, "include", "casacore")
133 if os.path.exists(pth):
134 libpath = os.path.join(p, LIBDIR)
135 conf.env.AppendUnique(CPPPATH=[pth,pth+'/..'])
136 break
137 cclibs = ["casa_python", "casa_images", "casa_ms",
138 "casa_coordinates", "casa_lattices",
139 "casa_fits", "casa_measures", "casa_scimath",
140 "casa_scimath_f", "casa_tables", "casa_casa"]
141 if conf.env["casacorestatic"]:
142 libs = [ env.File(os.path.join(libpath, "lib"+lib+".a")) \
143 for lib in cclibs ]
144 else:
145 conf.env.AppendUnique(LIBPATH=libpath)
146 if not conf.CheckLibWithHeader("casa_casa", "casa/aips.h",
147 language='c++', autoadd=0):
148 Exit(1)
149 libs = cclibs
150 conf.env.PrependUnique(LIBS=libs)
151
152 if not conf.CheckLib('stdc++', language='c++'): Exit(1)
153 if conf.env["alma"]:
154 conf.env.Append(CPPFLAGS=['-DUSE_CASAPY'])
155 if conf.env.get("extraflags"):
156 flags = conf.env.ParseFlags(conf.env["extraflags"])
157 conf.env.MergeFlags(flags)
158 env = conf.Finish()
159
160opts.Save('options.cache', env)
161
162env["version"] = "4.3.x"
163
164if env['mode'] == 'release':
165 if env["PLATFORM"] != "darwin":
166 env.Append(LINKFLAGS=['-Wl,-O1', '-s'])
167 env.Append(CCFLAGS=["-O2"])
168 env.Append(CCFLAGS=["-std=c++11"])
169else:
170 env.Append(CCFLAGS=["-g", "-W", "-Wall"])
171
172# Export for SConscript files
173Export("env")
174
175# build externals
176ext = env.SConscript("external-alma/SConscript")
177
178# build library
179so = env.SConscript("src/SConscript", variant_dir="build", duplicate=0)
180
181apps = env.SConscript("apps/SConscript")
182
183# test module import, to see if there are unresolved symbols
184def test_module(target,source,env):
185 pth = str(target[0])
186 mod = os.path.splitext(pth)[0]
187 sys.path.insert(2, os.path.split(mod)[0])
188 __import__(os.path.split(mod)[1])
189 print "ok"
190 return 0
191
192def test_str(target, source, env):
193 return "Testing module..."
194
195taction = Action(test_module, test_str)
196env.AddPostAction(so, taction)
197
198if env.GetOption("clean"):
199 Execute(Delete(".sconf_temp"))
200 Execute(Delete("options.cache"))
201 Execute(Delete(".sconsign.dblite"))
202if env["makedoc"].lower() != "none":
203 env.SConscript("doc/SConscript")
Note: See TracBrowser for help on using the repository browser.