source: trunk/SConstruct@ 2972

Last change on this file since 2972 was 2942, checked in by Malte Marquarding, 11 years ago

remove redundant libraries - lapack, blas and gfortran

File size: 8.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 ("wcslib", "The wcs library name", "wcs"),
51 ("wcsroot",
52 "The root directory where wcs is installed", None),
53 ("wcslibdir", "The wcs library location", None),
54 ("rpfitslib", "The rpfits library name", "rpfits"),
55 ("rpfitsroot",
56 "The root directory where rpfits is installed", None),
57 ("rpfitslibdir", "The rpfits library location", None),
58
59 ("pyraproot", "The root directory where libpyrap is installed",
60 None),
61 ("numpyincdir", "numpy header file directory",
62 get_numpy_incdir()),
63 BoolVariable("enable_pyrap",
64 "Use pyrap conversion library from system",
65 False),
66 ("pyraplib", "The name of the pyrap library", "pyrap"),
67 ("pyraplibdir", "The directory where libpyrap is installed",
68 None),
69 ("pyrapincdir", "The pyrap include location",
70 None),
71 EnumVariable("mode", "The type of build.", "release",
72 ["release","debug"], ignorecase=1),
73 EnumVariable("makedoc",
74 "Build the userguide in specified format",
75 "none",
76 ["none", "pdf", "html"], ignorecase=1),
77 BoolVariable("apps", "Build cpp apps", True),
78 BoolVariable("alma", "Enable alma specific functionality",
79 False),
80 )
81
82env = Environment( toolpath = ['./scons'],
83 tools = ["default", "utils", "casa"],
84 ENV = { 'PATH' : os.environ[ 'PATH' ],
85 'HOME' : os.environ[ 'HOME' ] },
86 options = opts)
87
88env.Help(opts.GenerateHelpText(env))
89env.SConsignFile()
90if not ( env.GetOption('clean') or env.GetOption('help') ):
91
92 conf = Configure(env)
93 if conf.env.get("extraroot", None):
94 conf.env.AddCustomPackage('extra')
95 conf.env.Append(CPPPATH=[distutils.sysconfig.get_python_inc()])
96 if not conf.CheckHeader("Python.h", language='c'):
97 Exit(1)
98 pylib = 'python'+distutils.sysconfig.get_python_version()
99 if env['PLATFORM'] == "darwin":
100 conf.env.Append(FRAMEWORKS=["Python"])
101 else:
102 if not conf.CheckLib(library=pylib, language='c'): Exit(1)
103
104 conf.env.AddCustomPackage('boost')
105 libname = conf.env["boostlib"]
106 if libname.find(".") > -1 and os.path.exists(libname):
107 conf.env.AppendUnique(LIBS=[env.File(libname)])
108 else:
109 if not conf.CheckLibWithHeader(libname,
110 'boost/python.hpp', language='c++'):
111 Exit(1)
112
113 if env["enable_pyrap"]:
114 conf.env.AddCustomPackage('pyrap')
115 if conf.CheckLib(conf.env["pyraplib"], language='c++', autoadd=0):
116 conf.env.PrependUnique(LIBS=env['pyraplib'])
117 else:
118 Exit(1)
119 else:
120 conf.env.AppendUnique(CPPPATH=[conf.env["numpyincdir"]])
121 if conf.CheckHeader("numpy/numpyconfig.h"):
122 conf.env.Append(CPPDEFINES=["-DAIPS_USENUMPY"])
123 else:
124 conf.env.Exit(1)
125 # compile in pyrap from here...
126 conf.env["pyrapint"] = "#/external/libpyrap/pyrap-0.3.2"
127 conf.env.Append(CPPFLAGS=['-DHAVE_LIBPYRAP'])
128
129 if not conf.CheckLib("m"):
130 Exit(1)
131 # test for cfitsio
132 conf.env.AddCustomPackage('cfitsio')
133 libname = conf.env["cfitsiolib"]
134 if not conf.CheckHeader("fitsio.h"):
135 #SuSE is being special
136 conf.env.AppendUnique(CPPPATH=['/usr/include/libcfitsio0'])
137 if not conf.CheckHeader("fitsio.h"):
138 Exit(1)
139 if libname.find(".") > -1 and os.path.exists(libname):
140 conf.env.AppendUnique(LIBS=[env.File(libname)])
141 else:
142 if not conf.CheckLib(libname, language='c'):
143 Exit(1)
144 conf.env.AddCustomPackage('wcs')
145 libname = conf.env["wcslib"]
146 if libname.find(".") > -1 and os.path.exists(libname):
147 conf.env.AppendUnique(LIBS=[env.File(libname)])
148 else:
149 if not conf.CheckLibWithHeader(libname,
150 'wcslib/wcs.h', language='c'):
151 Exit(1)
152
153 conf.env.AddCustomPackage('rpfits')
154 if not conf.CheckLibWithHeader(conf.env["rpfitslib"], "RPFITS.h",
155 language="c"):
156 Exit(1)
157
158 libpath = ""
159 for p in [conf.env["casacoreroot"], conf.env.get("extraroot", "")]:
160 pth = os.path.join(p, "include", "casacore")
161 if os.path.exists(pth):
162 libpath = os.path.join(p, LIBDIR)
163 conf.env.AppendUnique(CPPPATH=[pth])
164 break
165 cclibs = ["casa_images", "casa_ms", "casa_components",
166 "casa_coordinates", "casa_lattices",
167 "casa_fits", "casa_measures", "casa_scimath",
168 "casa_scimath_f", "casa_tables", "casa_casa"]
169 if conf.env["casacorestatic"]:
170 libs = [ env.File(os.path.join(libpath, "lib"+lib+".a")) \
171 for lib in cclibs ]
172 else:
173 conf.env.AppendUnique(LIBPATH=libpath)
174 if not conf.CheckLibWithHeader("casa_casa", "casa/aips.h",
175 language='c++', autoadd=0):
176 Exit(1)
177 libs = cclibs
178 conf.env.PrependUnique(LIBS=libs)
179
180 if not conf.CheckLib('stdc++', language='c++'): Exit(1)
181 if conf.env["alma"]:
182 conf.env.Append(CPPFLAGS=['-DUSE_CASAPY'])
183 if conf.env.get("extraflags"):
184 flags = conf.env.ParseFlags(conf.env["extraflags"])
185 conf.env.MergeFlags(flags)
186 env = conf.Finish()
187
188opts.Save('options.cache', env)
189
190env["version"] = "4.3.x"
191
192if env['mode'] == 'release':
193 if env["PLATFORM"] != "darwin":
194 env.Append(LINKFLAGS=['-Wl,-O1', '-s'])
195 env.Append(CCFLAGS=["-O2"])
196else:
197 env.Append(CCFLAGS=["-g", "-W", "-Wall"])
198
199# Export for SConscript files
200Export("env")
201
202# build externals
203ext = env.SConscript("external-alma/SConscript")
204
205# build library
206so = env.SConscript("src/SConscript", variant_dir="build", duplicate=0)
207
208apps = env.SConscript("apps/SConscript")
209
210# test module import, to see if there are unresolved symbols
211def test_module(target,source,env):
212 pth = str(target[0])
213 mod = os.path.splitext(pth)[0]
214 sys.path.insert(2, os.path.split(mod)[0])
215 __import__(os.path.split(mod)[1])
216 print "ok"
217 return 0
218
219def test_str(target, source, env):
220 return "Testing module..."
221
222taction = Action(test_module, test_str)
223env.AddPostAction(so, taction)
224
225if env.GetOption("clean"):
226 Execute(Delete(".sconf_temp"))
227 Execute(Delete("options.cache"))
228 Execute(Delete(".sconsign.dblite"))
229if env["makedoc"].lower() != "none":
230 env.SConscript("doc/SConscript")
Note: See TracBrowser for help on using the repository browser.