Portability issues, README.md improved with Ubuntu requirements to make easier the...
[anna.git] / SConstruct
1 import os
2
3 # Basic paths
4 prefix = ARGUMENTS.get ('prefix', "/usr/local")
5 usr_local_include = os.path.join (prefix, "include")
6 usr_local_lib = os.path.join (prefix, "lib")
7 usr_local_bin = os.path.join (prefix, "bin")
8 opt_bin = "/opt/bin"
9 current_directory = Dir ('.').abspath
10
11 # Anna targets
12 target_usr_local_include = os.path.join (usr_local_include, "anna")
13 target_usr_local_lib = os.path.join (usr_local_lib, "anna")
14 #target_usr_local_bin = usr_local_bin
15 target_opt_bin = os.path.join (opt_bin, "anna")
16
17 # Versioning
18 release = ARGUMENTS.get ('release', 0)
19
20 # Environment
21 env = Environment ()
22 oracle_includes = os.environ['ORACLE_HOME'] + "/include"
23         
24 # Headers
25 source_include = os.path.join (current_directory, "include")
26 usr_include = [
27   #"/usr/include/oracle/12.1/client64",
28   oracle_includes,
29   "/usr/include/libxml2",
30   #"/usr/include/boost",
31   #"/usr/include/mysql", 
32   #"/usr/include/openssl", 
33 ]
34
35 # Libraries
36 libraries = []
37
38 # Environment
39 #env = Environment ()
40 # CPPPATH will be relative to src/<target>
41 env.Append (CPPPATH = [source_include, usr_local_include, usr_include ])
42 env.Append (CCFLAGS = '-std=c++0x')
43 # C++11 support:
44 #env.Append (CXXFLAGS = '-std=c++11')
45
46 env.Append (LIBS = [''])
47 # scons -Q release=1
48 if int(release):
49   variant='release'
50   env.Append (CCFLAGS = '-O3')
51   env.Append (VARIANT = variant)
52 else:
53   variant='debug'
54   env.Append (CCFLAGS = '-g -O0 -D_DEBUG')
55   env.Append (LIBPATH = os.path.join (current_directory, variant))
56   env.Append (VARIANT = variant)
57
58 variant_dir=variant
59 source = os.path.join (current_directory, "source")
60 sources = Glob(source + '/*')
61 for source in sources:
62   ss = str (source)
63   ss += '/SConstruct'
64   compile_library = SConscript (ss, exports='env')
65   libraries.extend (compile_library)
66
67 env.Default (libraries)
68
69 #
70 ## Run 'scons example' to compile examples
71 #
72 example_list = []
73 example = os.path.join (current_directory, "example")
74 examples = Glob(example + '/*/*')
75 for example in examples:
76   ss = str (example)
77   bn_ss = os.path.basename(ss)
78   noExtension = (len(bn_ss.split('.')) == 1)
79   if noExtension:
80     ss += '/SConstruct'
81     example_program = SConscript (ss, exports='env')
82     example_list.extend (example_program)
83     print example_program [0]
84
85 #Depends (example_list, compile_library)
86    
87 # In order to remove examples objects with 'scons -c' we need to default them at built ('scons') procedure:
88 env.Default (example_list)
89 #env.Alias ('example', example_list)
90
91
92 #
93 # Run 'scons test' to compile unit-tests
94 #
95 test_unit_list = []
96 run_tests = []
97
98 test = os.path.join (current_directory, "test")
99 tests = Glob(test + '/*')
100 for test in tests:
101   ss = str (test)
102   ss += '/SConstruct'
103   test_unit_program = SConscript (ss, exports='env')
104   test_unit_list.extend (test_unit_program)
105   print test_unit_program [0]
106   test_unit = Builder (action = '%s --report_level=short > $TARGET' % test_unit_program [0])
107   env ['BUILDERS']['RunTestUnit'] = test_unit
108   test_unit_result = env.RunTestUnit ('%s.output' % test_unit_program [0], 'SConstruct')
109   run_tests.extend (test_unit_result)
110   Depends (test_unit_result, test_unit_program)
111
112 env.Alias ('test', run_tests)
113 # In order to remove test objects with 'scons -c' we need to default them at built ('scons') procedure:
114 env.Default (test_unit_list)
115
116 #
117 # Run 'scons doc' to generate documentation
118 #
119 # Doxygen Builder does not work properly at the moment. We will use an alias/action 
120 #env = Environment(tools = ["default", "doxygen"], toolpath = './docs/doxygen')
121 #env.Doxygen("./docs/doxygen/Doxyfile")
122 # Finally, is enough to execute doxygen which will solve dependences and work for
123 #  only modified files:
124 env.Alias('doc', env.Command('doc.dummy', [], 'cd docs/doxygen; doxygen'))
125
126 #
127 # Run 'sudo scons install' to install the suite:
128 #
129 #       'sudo scons install-include' for only headers
130 #       'sudo scons install-lib'     for only libraries
131 #       'sudo scons install-bin'     for only binaries
132 #
133 # Run 'sudo scons uninstall' to uninstall the suite
134 #
135 # See http://www.scons.org/wiki/InstallTargets and http://www.scons.org/doc/production/HTML/scons-user/c2938.html
136 install_include = env.Install (target_usr_local_include, Glob("include/anna/*"))
137 install_lib =     env.Install (target_usr_local_lib, Glob("source/*/" + variant + "/*.a"))
138 install_example = env.Install (target_opt_bin, Glob("example/*/*/" + variant + "/example_*"))
139 #Default ('install')
140 Depends (install_include, test_unit_result)
141 Depends (install_lib, test_unit_result)
142 Depends (install_example, test_unit_result)
143
144 iil = env.Alias('install-include-and-lib', [target_usr_local_include, target_usr_local_lib])
145 iex = env.Alias('install-example', target_opt_bin)
146 env.Alias('install', [iil, iex])
147
148 env.Command ("uninstall", None, [ Delete(target_usr_local_include), Delete(target_usr_local_lib), Delete(target_opt_bin) ])
149