source: trunk/SConstruct @ 1469

Last change on this file since 1469 was 1469, checked in by Malte Marquarding, 15 years ago

add ipy_user_conf.py to installed files

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