def IMPModuleBuild(env, version=None, required_modules=[], lib_only_required_modules=[], optional_modules=[], lib_only_optional_modules=[], optional_dependencies=[], config_macros=[], module=None, module_libname=None, module_pylibname=None, module_include_path=None, module_preproc=None, module_namespace=None, module_nicename=None, required_dependencies=[], alias_name=None, cxxflags=[], cppdefines=[], cpppath=[], python_docs=False, local_module=False, standards=True): if env.GetOption('help'): return dta= scons_tools.data.get(env) if module is None: module=Dir('.').abspath.split('/')[-1] if module=="local": module=Dir('.').abspath.split('/')[-2]+"_local" if not module_libname and (module != module.lower() or module.find("-") != -1): scons_tools.utility.report_error("Module names can only have lower case characters and numbers") if module_libname is None: module_libname="imp_"+module if module_pylibname is None: module_pylibname="_IMP_"+module if module_include_path is None: module_include_path="IMP/"+module if module_namespace is None: module_namespace="IMP::"+module if module_preproc is None: module_preproc=module_namespace.replace("::","_").upper() if module_nicename is None: module_nicename= "IMP."+module if alias_name is None: alias_name=module if python_docs: env.Append(IMP_PYTHON_DOCS=[module]) optm=optional_modules+lib_only_optional_modules optd=optional_dependencies reqd=required_dependencies reqm=required_modules+lib_only_required_modules all_sconscripts=stp.get_sconscripts(env, ['data', 'examples']) nenv = scons_tools.utility.configure_module(env, module, alias_name, module_libname, version, required_modules=reqm, optional_dependencies=optd, optional_modules=optm, required_dependencies= reqd) if not nenv: return preclone=env env = nenv vars={'module_include_path':module_include_path, 'module':module, 'PREPROC':module_preproc, 'EXPORT':module_preproc.replace("_", ""), 'namespace':module_namespace, 'module_libname':module_libname, 'module_pylibname':module_pylibname, 'module_nicename':module_nicename, 'module_alias':alias_name} env['IMP_MODULE_VARS']=vars build_config=[] if cxxflags: env.Replace(CXXFLAGS=cxxflags) if cppdefines: env.Append(CPPDEFINES=cppdefines) if cpppath: env.Append(CPPPATH=cpppath) #if len(found_optional_modules + found_optional_dependencies)>0: # print " (using " +", ".join(found_optional_modules + found_optional_dependencies) +")" real_config_macros=config_macros[:] #print "config", module, real_config_macros env['IMP_MODULE_CONFIG']=real_config_macros for s in all_sconscripts: env.SConscript(s, exports='env') if env['IMP_PASS']=="BUILD": dta.add_to_alias("all", _get_module_alias(env)) # needed for data for m in _get_module_modules(env): env.Requires(dta.get_alias(_get_module_alias(env)), dta.get_alias(dta.modules[m].alias)) if standards: root=Dir(".").abspath if env.get('repository', None): old=Dir("#").abspath #print old, root, env['repository'] root=root.replace(old, Dir(Dir("#").abspath+"/"+env['repository']).abspath) scons_tools.standards.add(env, [root+"/"+x for x in ["include/*.h", "include/internal/*.h", "src/*.cpp", "src/internal/*.cpp", "test/*.py", "bin/*.cpp"]]) return env