source: trunk/SConstruct @ 3126

Last change on this file since 3126 was 3126, checked in by Malte Marquarding, 7 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.