summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Neptune/Build/Build.scons
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Neptune/Build/Build.scons')
-rw-r--r--lib/libUPnP/Neptune/Build/Build.scons237
1 files changed, 237 insertions, 0 deletions
diff --git a/lib/libUPnP/Neptune/Build/Build.scons b/lib/libUPnP/Neptune/Build/Build.scons
new file mode 100644
index 0000000..ff5021d
--- /dev/null
+++ b/lib/libUPnP/Neptune/Build/Build.scons
@@ -0,0 +1,237 @@
+import sys
+import os
+import imp
+from glob import glob
+
+#######################################################
+# reusable functions and data structures
+#######################################################
+def LoadTool(name, env, **kw):
+ config_path = GetBuildPath('#/Build/Tools/SCons')
+ file, path, desc = imp.find_module(name, [config_path])
+ module = imp.load_module(name, file, path, desc)
+ module.generate(env, **kw)
+
+def MergeListUnique(item_list, items):
+ for item in items:
+ if not item in item_list: item_list.append(item)
+
+def MergeItemUnique(item_list, item):
+ if not item in item_list: item_list.append(item)
+
+def GlobSources(drct, patterns, excluded_files=[]):
+ root = GetBuildPath('#'+drct)
+ files = []
+ for pattern in Split(patterns):
+ files += glob(root+'/'+pattern)
+ return [drct+'/'+os.path.basename(x) for x in files if os.path.basename(x) not in excluded_files]
+
+def GetDirPath(dir):
+ return '#/'+dir
+
+def DeclareBuildDir(dir):
+ env.VariantDir(dir, GetDirPath(dir), duplicate=0)
+
+def GetIncludeDirs(modules, exclude=None):
+ dirs = []
+ for module in Split(modules):
+ if Modules.has_key(module) and not module == exclude:
+ dirs += Modules[module].GetIncludeDirs()
+ else:
+ dirs += [GetDirPath(module)]
+ return dirs
+
+def GetLibraries(modules):
+ libs = []
+ for module in Split(modules):
+ if Modules.has_key(module):
+ libs += Modules[module].GetLibraries()
+ else:
+ libs += [module]
+ return libs
+
+def BuildApp(source_dir, name, deps):
+ DeclareBuildDir(source_dir)
+ libs = GetLibraries(deps)
+ cpp_path = GetIncludeDirs(deps)
+ prog = env.Program(target=name,
+ source=GlobSources(source_dir, ['*c', '*.cpp']),
+ LIBS=libs, CPPPATH=cpp_path)
+ env.Alias(name, prog)
+
+Modules = {}
+class Module:
+ def __init__(self, name, included_modules = [], linked_modules = []):
+ self.name = name
+ self.included_modules = included_modules
+ self.linked_modules = linked_modules
+ self.product = []
+
+ def GetLibraries(self):
+ return self.product+GetLibraries(self.linked_modules)
+
+ def GetIncludeDirs(self):
+ return GetIncludeDirs(self.included_modules+self.build_include_dirs, self.name)
+
+class LibraryModule(Module):
+ def __init__(self, name,
+ build_source_dirs = ['.'],
+ build_source_files = {},
+ source_root = 'Source',
+ build_source_pattern = ['*.c', '*.cpp'],
+ build_include_dirs = [],
+ included_modules = [],
+ included_only_modules = [],
+ linked_modules = [],
+ environment = None,
+ excluded_files = [],
+ extra_cpp_defines = [],
+ shared = False) :
+ build_source_dirs = [source_root+'/'+drct for drct in build_source_dirs]
+ Module.__init__(self,
+ name,
+ Split(included_modules)+Split(included_only_modules)+Split(build_source_dirs),
+ Split(linked_modules)+Split(included_modules))
+ self.build_include_dirs = build_include_dirs
+ if environment is None:
+ self.env = env.Clone()
+ else:
+ self.env = environment.Clone()
+ self.env.AppendUnique(CPPDEFINES = extra_cpp_defines)
+
+ # store this new object in the module dictionary
+ Modules[name] = self
+
+ # for each source drct to build, create a BuildDir
+ # to say where we want the object files to be built,
+ # and compute the list of source files to build
+ sources = []
+ for drct in Split(build_source_dirs):
+ DeclareBuildDir(drct)
+ sources += GlobSources(drct, build_source_pattern, excluded_files)
+
+ # add cherry-picked files
+ for drct in build_source_files.keys():
+ pattern = build_source_files[drct]
+ drct_path = source_root+'/'+drct
+ DeclareBuildDir(drct_path)
+ sources += GlobSources(drct_path, pattern)
+
+ # calculate our build include path
+ cpp_path = GetIncludeDirs(Split(self.build_include_dirs) + Split(build_source_dirs) + self.included_modules + self.linked_modules)
+
+ # the product is a library
+ self.env.AppendUnique(CPPPATH=cpp_path)
+ if shared is False:
+ self.product = self.env.Library(target=name, source=sources)
+ else:
+ libs = GetLibraries(Split(linked_modules))
+ self.product = self.env.SharedLibrary(target=name, LIBS=libs, source=sources)
+ self.env.Alias(name, self.product)
+
+
+def Application(name, dir):
+ DeclareBuildDir(dir)
+ libs = GetLibraries('Neptune')
+ cpp_path = GetIncludeDirs('Neptune')
+
+ prog = env.Program(name,
+ GlobSources(dir, ['*.c', '*.cpp']) + env['NPT_EXTRA_EXECUTABLE_OBJECTS'],
+ LIBS=libs, CPPPATH=cpp_path)
+ #env.Alias(name, prog)
+ if env.has_key('NPT_EXECUTABLE_POST_PROCESSOR'):
+ env.AddPostAction(prog, env['NPT_EXECUTABLE_POST_PROCESSOR'])
+
+#######################################################
+# Main Build
+#######################################################
+Import("env")
+
+### defaults
+env['NPT_EXTRA_LIBS'] = []
+env['NPT_EXTRA_EXECUTABLE_OBJECTS'] = []
+
+if (env['build_config'] == 'Debug'):
+ env.AppendUnique(CPPDEFINES=['NPT_DEBUG', 'NPT_CONFIG_ENABLE_LOGGING'])
+else:
+ env.AppendUnique(CPPDEFINES=['NDEBUG', 'NPT_CONFIG_ENABLE_LOGGING'])
+
+### try to read in any target specific configuration
+target_config_file = env.GetBuildPath('#/Build/Targets/'+env['target']+'/Config.scons')
+if os.path.exists(target_config_file):
+ # Load the target-specific config file
+ execfile(target_config_file)
+
+#######################################################
+# modules
+#######################################################
+
+extra_cpp_flags = []
+if not env.has_key('NPT_CONFIG_NO_ZIP'):
+ env.AppendUnique(CPPDEFINES=['NPT_CONFIG_ENABLE_ZIP'])
+ zlib_sources = ['../ThirdParty/zlib-1.2.8']
+else:
+ zlib_sources = []
+
+if not env.has_key('NPT_CONFIG_NO_SSL'):
+ env.AppendUnique(CPPDEFINES=['NPT_CONFIG_ENABLE_TLS'])
+ axtls_sources = ['../ThirdParty/axTLS/crypto', '../ThirdParty/axTLS/ssl', '../ThirdParty/axTLS/config/Generic']
+ tls_data_dirs = ['Data/TLS']
+ tls_tests = ['Tls1']
+else:
+ axtls_sources = []
+ tls_data_dirs = []
+ tls_tests = []
+
+
+if env['shared']:
+ LibraryModule(name = 'Neptune',
+ build_source_dirs = ['Core']+tls_data_dirs+axtls_sources+zlib_sources,
+ build_source_files = env['NPT_SYSTEM_SOURCES'],
+ linked_modules = env['NPT_EXTRA_LIBS'],
+ shared = True)
+else:
+ LibraryModule(name = 'Zlib',
+ source_root = '.',
+ build_source_dirs = ['ThirdParty/zlib-1.2.3'])
+
+ LibraryModule(name = 'axTLS',
+ source_root = '.',
+ build_source_dirs = ['ThirdParty/axTLS/crypto', 'ThirdParty/axTLS/ssl', 'ThirdParty/axTLS/config/Generic'])
+
+ LibraryModule(name = 'Neptune',
+ build_source_dirs = ['Core']+tls_data_dirs,
+ build_source_files = env['NPT_SYSTEM_SOURCES'],
+ linked_modules = env['NPT_EXTRA_LIBS']+['Zlib']+['axTLS'])
+
+for app in ['NetPump', 'NetConfig', 'NetPing', 'NetEcho', 'NetGet', 'NetResolve', 'NetBench', 'MiniHttpServer', 'ZipHttpServer']:
+ Application(app, 'Source/Apps/'+app)
+
+tests = ['Arrays1',
+ 'BufferedStreams1',
+ 'HttpClient1',
+ 'HttpClient2',
+ 'HttpServer1',
+ 'Network1',
+ 'Lists1',
+ 'Maps1',
+ 'Misc1',
+ 'RingBuffer1',
+ 'Strings1',
+ 'Xml1',
+ 'Udp1',
+ 'Threads1',
+ 'Queue1',
+ 'Messages1',
+ 'Messages2',
+ 'Url1',
+ 'Zip1',
+ 'Zip2',
+ 'Time1',
+ 'Sockets1',
+ 'FileTest1',
+ 'FileTest2',
+ 'FileTest3']+tls_tests
+
+for test in tests:
+ Application(test+'Test', 'Source/Tests/'+test)