source: trunk/SConstruct@ 1492

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