source: trunk/SConstruct @ 1327

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

enabled customisable lib names

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