source: trunk/SConstruct @ 1687

Last change on this file since 1687 was 1687, checked in by Malte Marquarding, 14 years ago

Don't use pyrap by default. remove AdCommonOptions?

File size: 9.3 KB
Line 
1import os
2import sys
3import distutils.sysconfig
4import platform
5import SCons
6
7moduledir = distutils.sysconfig.get_python_lib()
8if  platform.architecture()[0] == '64bit':
9    # hack to install into /usr/lib64 if scons is in the 32bit /usr/lib/
10    if moduledir.startswith("/usr/lib/"):
11        moduledir = moduledir.replace("lib", "lib64")
12
13
14EnsureSConsVersion(1,1,0)
15
16opts = Variables("options.cfg")
17opts.AddVariables(
18                ("FORTRAN", "The fortran compiler", None),
19                ("f2clib", "The fortran to c library", None),
20                PathVariable("prefix",
21                "The root installation path",
22                           distutils.sysconfig.PREFIX),
23                PathVariable("moduledir",
24                            "The python module path (site-packages))",
25                            moduledir),
26                PathVariable("casacoreroot", "The location of casacore",
27                                    "/usr/local"),
28                ("boostroot", "The root dir where boost is installed", None),
29                ("boostlib", "The name of the boost python library",
30                 "boost_python"),
31                ("boostlibdir", "The boost library location", None),
32                ("boostincdir", "The boost header file location", None),
33                ("lapackroot",
34                 "The root directory where lapack is installed", None),
35                ("lapacklibdir", "The lapack library location", None),
36                ("lapacklib",
37                 "The lapack library name (e.g. for specialized AMD libraries",
38                 "lapack"),
39                ("blasroot",
40                 "The root directory where blas is installed", None),
41                ("blaslibdir", "The blas library location", None),
42                ("blaslib",
43                 "The blas library name (e.g. for specialized AMD libraries",
44                 "blas"),
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                ("wcsroot",
51                 "The root directory where wcs is installed", None),
52                ("wcslibdir", "The wcs library location", None),
53                ("rpfitslib", "The rpfits library name", "rpfits"),
54                ("rpfitsroot",
55                 "The root directory where rpfits is installed", None),
56                ("rpfitslibdir", "The rpfits library location", None),
57#               ("rpfitsincdir", "The rpfits include location", None),
58                ("pyraproot", "The root directory where libpyrap is installed",
59                 None),
60                ("pyraplib", "The name of the pyrap library", "pyrap"),
61                ("pyraplibdir", "The directory where libpyrap is installed",
62                 None),
63                ("pyrapincdir", "The pyrap include location",
64                 None),
65                BoolVariable("enable_pyrap", "Use pyrap conversion library",
66                             False),
67
68                EnumVariable("mode", "The type of build.", "release",
69                           ["release","debug"], ignorecase=1),
70                ("makedist",
71                 "Make a binary archive giving a suffix, e.g. sarge or fc5",
72                 ""),
73                EnumVariable("makedoc", "Build the userguide in specified format",
74                           "none",
75                           ["none", "pdf", "html"], ignorecase=1),
76                BoolVariable("apps", "Build cpp apps", False),
77                BoolVariable("alma", "Enable alma specific functionality",
78                             False),
79                )
80
81env = Environment( toolpath = ['./scons'],
82                   tools = ["default", "archiver", "utils",
83                            "quietinstall"],
84                   ENV = { 'PATH' : os.environ[ 'PATH' ],
85                          'HOME' : os.environ[ 'HOME' ] },
86                   options = opts)
87
88Help(opts.GenerateHelpText(env))
89env.SConsignFile()
90
91casacoretooldir = os.path.join(env["casacoreroot"],"share",
92                                   "casacore")
93if not os.path.exists(casacoretooldir):
94    print "Could not find casacore scons tools"
95    Exit(1)
96
97# load casacore specific build flags
98env.Tool('casaoptions', [casacoretooldir])
99opts.Update(env)
100env.Tool('casa', [casacoretooldir])
101
102if not env.GetOption('clean'):
103    conf = Configure(env)
104
105    conf.env.AppendUnique(LIBPATH=os.path.join(conf.env["casacoreroot"],
106                                               "lib"))
107    conf.env.AppendUnique(CPPPATH=os.path.join(conf.env["casacoreroot"],
108                                               "include", "casacore"))
109    if not conf.CheckLib("casa_casa", language='c++'): Exit(1)
110    conf.env.PrependUnique(LIBS=["casa_images", "casa_ms", "casa_components",
111                                 "casa_coordinates", "casa_lattices",
112                                 "casa_fits", "casa_measures", "casa_scimath",
113                                 "casa_scimath_f", "casa_tables",
114                                 "casa_mirlib"])
115    conf.env.Append(CPPPATH=[distutils.sysconfig.get_python_inc()])
116    if not conf.CheckHeader("Python.h", language='c'):
117        Exit(1)
118    pylib = 'python'+distutils.sysconfig.get_python_version()
119    if env['PLATFORM'] == "darwin":
120        conf.env.Append(FRAMEWORKS=["Python"])
121    else:
122        if not conf.CheckLib(library=pylib, language='c'): Exit(1)
123
124    conf.env.AddCustomPackage('boost')
125    if not conf.CheckLibWithHeader(conf.env["boostlib"],
126                                   'boost/python.hpp', language='c++'):
127        Exit(1)
128
129    conf.env.AddCustomPackage('pyrap')
130    if  conf.env.get("enable_pyrap") and conf.CheckLib(conf.env["pyraplib"],
131                                                       language='c++',
132                                                       autoadd=0):
133        conf.env.Append(CPPFLAGS=['-DHAVE_PYRAP'])
134        conf.env.PrependUnique(LIBS=env['pyraplib'])
135   
136    # test for cfitsio
137    if not conf.CheckLib("m"): Exit(1)
138    conf.env.AddCustomPackage('cfitsio')
139    if not conf.CheckLibWithHeader(conf.env["cfitsiolib"],
140                                   'fitsio.h', language='c'):
141        Exit(1)
142    conf.env.AddCustomPackage('wcs')
143    if not conf.CheckLibWithHeader('wcs', 'wcslib/wcs.h', language='c'):
144        Exit(1)
145    conf.env.AddCustomPackage('rpfits')
146    if not conf.CheckLib(conf.env["rpfitslib"], language="c"):
147        Exit(1)
148
149    # test for blas/lapack
150    conf.env.AddCustomPackage("lapack")
151    if not conf.CheckLib(conf.env["lapacklib"]): Exit(1)
152    blasname = conf.env.get("blaslib", "blas")
153    conf.env.AddCustomPackage("blas")
154    if not conf.CheckLib(conf.env["blaslib"]): Exit(1)
155    conf.env.CheckFortran(conf)
156    if not conf.CheckLib('stdc++', language='c++'): Exit(1)
157    if conf.env["alma"]:
158        conf.env.Append(CPPFLAGS=['-DUSE_ALMA'])
159    env = conf.Finish()
160
161env["version"] = "2.x"
162
163if env['mode'] == 'release':
164    if env["PLATFORM"] != "darwin":
165        env.Append(LINKFLAGS=['-Wl,-O1', '-s'])
166    env.Append(CCFLAGS=["-O2"])
167else:
168    env.Append(CCFLAGS=["-g", "-Wall"])
169
170# Export for SConscript files
171Export("env")
172
173# build externals
174env.SConscript("external/SConscript")
175# build library
176so = env.SConscript("src/SConscript", build_dir="build", duplicate=0)
177# test module import, to see if there are unresolved symbols
178def test_module(target,source,env):
179    pth = str(target[0])
180    mod = os.path.splitext(pth)[0]
181    sys.path.insert(2, os.path.split(mod)[0])
182    __import__(os.path.split(mod)[1])
183    print "ok"
184    return 0
185def test_str(target, source, env):
186    return "Testing module..."
187
188taction = Action(test_module, test_str)
189env.AddPostAction(so, taction)
190
191# install targets
192somod = env.Install("$moduledir/asap", so )
193pymods = env.Install("$moduledir/asap", env.SGlob("python/*.py"))
194bins = env.Install("$prefix/bin", ["bin/asap", "bin/asap_update_data"])
195shares = env.Install("$moduledir/asap/data", "share/ipythonrc-asap")
196shares = env.Install("$moduledir/asap/data", "share/ipy_user_conf.py")
197env.Alias('install', [somod, pymods, bins, shares])
198
199# install aips++ data repos
200rootdir=None
201outdir =  os.path.join(env["moduledir"],'asap','data')
202sources = ['ephemerides','geodetic']
203if os.path.exists("/nfs/aips++/data"):
204    rootdir = "/nfs/aips++/data"
205elif os.path.exists("data"):
206    rootdir = "./data"
207if rootdir is not None:
208    ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
209    data =  env.InstallAs(ofiles, ifiles)
210    env.Alias('install', data)
211
212# make binary distribution
213if len(env["makedist"]):
214    env["stagedir"] = "asap-%s-%s" % (env["version"], env["makedist"])
215    env.Command('Staging distribution for archive in %s' % env["stagedir"],
216                '', env.MessageAction)
217    st0 = env.QInstall("$stagedir/asap", [so,  env.SGlob("python/*.py")] )
218    env.QInstall("$stagedir/bin", ["bin/asap", "bin/asap_update_data"])
219    env.QInstall("$stagedir", ["bin/install"])
220    env.QInstall("$stagedir/asap/data", "share/ipythonrc-asap")
221    env.QInstall("$stagedir/asap/data", "share/ipy_user_conf.py")
222    if rootdir is not None:
223        # This creates a directory Using data table... - disabled
224        #env.Command("Using data tables in %s" % rootdir,
225        #           '', env.MessageAction)
226        outdir =  os.path.join(env["stagedir"],'asap','data')
227        ofiles, ifiles = env.WalkDirTree(outdir, rootdir, sources)
228        env.QInstallAs(ofiles, ifiles)
229    else:
230        env.Command("No data tables available. Use 'asap_update_data' after install",
231                    '', env.MessageAction)
232    arch = env.Archiver(os.path.join("dist",env["stagedir"]),
233                        env["stagedir"])
234    env.AddPostAction(arch, Delete("$stagedir"))
235if env["makedoc"].lower() != "none":
236    env.SConscript("doc/SConscript")
237
238if env["apps"]:
239    env.SConscript("apps/SConscript")
240
241if env.GetOption("clean"):
242    Execute(Delete(".sconf_temp"))
Note: See TracBrowser for help on using the repository browser.