source: trunk/SConstruct@ 3037

Last change on this file since 3037 was 3034, checked in by Malte Marquarding, 10 years ago

Remove reference to libpryap (scons). use casacore_python from now on

File size: 7.5 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 not conf.CheckLib("m"):
114 Exit(1)
115 # test for cfitsio
116 conf.env.AddCustomPackage('cfitsio')
117 libname = conf.env["cfitsiolib"]
118 if not conf.CheckHeader("fitsio.h"):
119 #SuSE is being special
120 conf.env.AppendUnique(CPPPATH=['/usr/include/libcfitsio0'])
121 if not conf.CheckHeader("fitsio.h"):
122 Exit(1)
123 if libname.find(".") > -1 and os.path.exists(libname):
124 conf.env.AppendUnique(LIBS=[env.File(libname)])
125 else:
126 if not conf.CheckLib(libname, language='c'):
127 Exit(1)
128 conf.env.AddCustomPackage('wcs')
129 libname = conf.env["wcslib"]
130 if libname.find(".") > -1 and os.path.exists(libname):
131 conf.env.AppendUnique(LIBS=[env.File(libname)])
132 else:
133 if not conf.CheckLibWithHeader(libname,
134 'wcslib/wcs.h', language='c'):
135 Exit(1)
136
137 conf.env.AddCustomPackage('rpfits')
138 if not conf.CheckLibWithHeader(conf.env["rpfitslib"], "RPFITS.h",
139 language="c"):
140 Exit(1)
141
142 libpath = ""
143 for p in [conf.env["casacoreroot"], conf.env.get("extraroot", "")]:
144 pth = os.path.join(p, "include", "casacore")
145 if os.path.exists(pth):
146 libpath = os.path.join(p, LIBDIR)
147 conf.env.AppendUnique(CPPPATH=[pth,pth+'/..'])
148 break
149 cclibs = ["casa_python", "casa_images", "casa_ms",
150 "casa_coordinates", "casa_lattices",
151 "casa_fits", "casa_measures", "casa_scimath",
152 "casa_scimath_f", "casa_tables", "casa_casa"]
153 if conf.env["casacorestatic"]:
154 libs = [ env.File(os.path.join(libpath, "lib"+lib+".a")) \
155 for lib in cclibs ]
156 else:
157 conf.env.AppendUnique(LIBPATH=libpath)
158 if not conf.CheckLibWithHeader("casa_casa", "casa/aips.h",
159 language='c++', autoadd=0):
160 Exit(1)
161 libs = cclibs
162 conf.env.PrependUnique(LIBS=libs)
163
164 if not conf.CheckLib('stdc++', language='c++'): Exit(1)
165 if conf.env["alma"]:
166 conf.env.Append(CPPFLAGS=['-DUSE_CASAPY'])
167 if conf.env.get("extraflags"):
168 flags = conf.env.ParseFlags(conf.env["extraflags"])
169 conf.env.MergeFlags(flags)
170 env = conf.Finish()
171
172opts.Save('options.cache', env)
173
174env["version"] = "4.3.x"
175
176if env['mode'] == 'release':
177 if env["PLATFORM"] != "darwin":
178 env.Append(LINKFLAGS=['-Wl,-O1', '-s'])
179 env.Append(CCFLAGS=["-O2"])
180else:
181 env.Append(CCFLAGS=["-g", "-W", "-Wall"])
182
183# Export for SConscript files
184Export("env")
185
186# build externals
187ext = env.SConscript("external-alma/SConscript")
188
189# build library
190so = env.SConscript("src/SConscript", variant_dir="build", duplicate=0)
191
192apps = env.SConscript("apps/SConscript")
193
194# test module import, to see if there are unresolved symbols
195def test_module(target,source,env):
196 pth = str(target[0])
197 mod = os.path.splitext(pth)[0]
198 sys.path.insert(2, os.path.split(mod)[0])
199 __import__(os.path.split(mod)[1])
200 print "ok"
201 return 0
202
203def test_str(target, source, env):
204 return "Testing module..."
205
206taction = Action(test_module, test_str)
207env.AddPostAction(so, taction)
208
209if env.GetOption("clean"):
210 Execute(Delete(".sconf_temp"))
211 Execute(Delete("options.cache"))
212 Execute(Delete(".sconsign.dblite"))
213if env["makedoc"].lower() != "none":
214 env.SConscript("doc/SConscript")
Note: See TracBrowser for help on using the repository browser.