source: trunk/SConstruct @ 1326

Last change on this file since 1326 was 1326, checked in by mar637, 17 years ago

only check for libcasa_casa

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