source: trunk/SConstruct@ 3127

Last change on this file since 3127 was 3126, checked in by Malte Marquarding, 8 years ago

Remove redundant wcslib

File size: 7.0 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"])
168else:
169 env.Append(CCFLAGS=["-g", "-W", "-Wall"])
170
171# Export for SConscript files
172Export("env")
173
174# build externals
175ext = env.SConscript("external-alma/SConscript")
176
177# build library
178so = env.SConscript("src/SConscript", variant_dir="build", duplicate=0)
179
180apps = env.SConscript("apps/SConscript")
181
182# test module import, to see if there are unresolved symbols
183def test_module(target,source,env):
184 pth = str(target[0])
185 mod = os.path.splitext(pth)[0]
186 sys.path.insert(2, os.path.split(mod)[0])
187 __import__(os.path.split(mod)[1])
188 print "ok"
189 return 0
190
191def test_str(target, source, env):
192 return "Testing module..."
193
194taction = Action(test_module, test_str)
195env.AddPostAction(so, taction)
196
197if env.GetOption("clean"):
198 Execute(Delete(".sconf_temp"))
199 Execute(Delete("options.cache"))
200 Execute(Delete(".sconsign.dblite"))
201if env["makedoc"].lower() != "none":
202 env.SConscript("doc/SConscript")
Note: See TracBrowser for help on using the repository browser.