1 |
import os |
2 |
Import('*') |
3 |
|
4 |
local_env=env.Copy() |
5 |
py_wrapper_local_env=env.Copy() |
6 |
# Remove the sharedlibrary prefix on all platform - we don't want 'lib' mucking with our python modules |
7 |
del py_wrapper_local_env['SHLIBPREFIX'] |
8 |
|
9 |
lib_name = 'escript' |
10 |
py_wrapper_name = lib_name+'cpp' |
11 |
py_wrapper_source = py_wrapper_name+'.cpp' |
12 |
py_wrapper_lib_name = py_wrapper_name |
13 |
|
14 |
# get the relevant file names: |
15 |
src_dir = local_env.Dir('.').srcnode().abspath |
16 |
filenames = [ x for x in os.listdir(src_dir) if os.path.splitext(x)[1] in [".h", ".c", ".cpp"] ] |
17 |
|
18 |
sources = [x for x in filenames if os.path.splitext(x)[1] in ['.cpp', '.c']] |
19 |
headers = [x for x in filenames if os.path.splitext(x)[1] in ['.h']] |
20 |
|
21 |
# Filter out sources that should not be in the list automatically |
22 |
sources.remove(py_wrapper_source) # FIXME: should probably refactor the source tree so the python wrapper isn't colocated with c++ sources |
23 |
|
24 |
local_env.Append(LIBS = [boost_lib, 'esysUtils', sys_libs ] ) |
25 |
py_wrapper_local_env.Append(LIBS = [boost_lib, lib_name, 'esysUtils', sys_libs ] ) |
26 |
if useNetCDF == 'yes': |
27 |
local_env.Append(LIBS = netCDF_libs_cxx) |
28 |
local_env.Append(CPPDEFINES = [ 'USE_NETCFD' ]) |
29 |
py_wrapper_local_env.Append(LIBS = netCDF_libs_cxx) |
30 |
py_wrapper_local_env.Append(CPPDEFINES = [ 'USE_NETCFD' ]) |
31 |
|
32 |
local_env.Append(CPPDEFINES = [ 'ESCRIPT_EXPORTS'] ) |
33 |
|
34 |
lib = local_env.SharedLibrary(lib_name, sources) |
35 |
py_wrapper_lib = py_wrapper_local_env.SharedLibrary( py_wrapper_lib_name, py_wrapper_source) |
36 |
|
37 |
include_path = Dir(lib_name, incinstall) |
38 |
|
39 |
local_env.Install(include_path, headers ) |
40 |
local_env.Install(libinstall, lib) |
41 |
py_wrapper_local_env.Install(pyinstall+'/escript', py_wrapper_lib) |
42 |
|
43 |
# export the lib target since tests will depend on it |
44 |
# the lib target is a list of file nodes (why? win32 produces more than one output file: .lib, .dll, .pdb) |
45 |
# FIXME: This list handling produces the desired result but can this be done directly with scons File nodes? |
46 |
dep_lib = [libinstall+'/'+str(x) for x in lib] |
47 |
Export('dep_lib') |
48 |
|
49 |
|
50 |
|
51 |
# add source files to release |
52 |
release_srcfiles = [ env.File(x) for x in filenames ] + [env.File("SConscript"), ] |
53 |
env.Zip(src_zipfile, release_srcfiles) |
54 |
env.Tar(src_tarfile, release_srcfiles) |
55 |
|
56 |
# Call the python sconscript |
57 |
env.SConscript(dirs = ['#/escript/py_src'], build_dir='py', duplicate=0) |
58 |
|
59 |
# Call the unit tests SConscript |
60 |
local_env.SConscript(dirs = ['#/escript/test'], build_dir='#/build/$PLATFORM/escript/test', duplicate=0) |