source: trunk/SConstruct@ 1326

Last change on this file since 1326 was 1326, checked in by mar637, 18 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.