def SetupEnvironment(env, settings): if sys.platform == "win32": return None name = settings["name"] # debug = (excons.GetArgument("debug", 0, int) != 0) opts = settings.get("automake-opts", {}) agenf = excons.abspath("./autogen.sh") conff = excons.abspath("./configure") blddir = automake.BuildDir(name) makef = blddir + "/Makefile" cfgc = automake.ConfigCachePath(name) cexts = [".c", ".h", ".cc", ".hh", ".cpp", ".hpp", ".cxx", ".hxx"] # Override default C/C++ file scanner to avoid SCons being too nosy env.Prepend( SCANNERS=SCons.Script.Scanner(function=DummyScanner, skeys=cexts)) env["AUTOMAKE_PROJECT"] = name env["AUTOMAKE_TOPDIR"] = excons.abspath(".") env["AUTOMAKE_OPTIONS"] = opts env["AUTOMAKE_TARGET"] = settings.get("automake-target", "install") env["AUTOMAKE_CONFIGURE"] = conff env["AUTOMAKE_AUTOGEN"] = agenf env["AUTOMAKE_MAKEFILE"] = makef env["AUTOMAKE_CONFIG_CACHE"] = cfgc env["BUILDERS"]["Autoconf"] = SCons.Script.Builder( action=SCons.Script.Action(AutoconfAction, "Running autoconf ...")) env["BUILDERS"]["AutomakeConfigure"] = SCons.Script.Builder( action=SCons.Script.Action(ConfigureAction, "Configure using Automake ...")) env["BUILDERS"]["Automake"] = SCons.Script.Builder( action=SCons.Script.Action(BuildAction, "Build using Automake ...")) # Check if we need to reconfigure if not SCons.Script.GetOption("clean"): if not os.path.isdir(blddir): try: os.makedirs(blddir) except: return None doconf = True if os.path.isfile(cfgc): doconf = False with open(cfgc, "r") as f: try: d = eval(f.read()) for k, v in d.iteritems(): if not k in opts or opts[k] != v: doconf = True break if not doconf: for k, v in opts.iteritems(): if not k in d: doconf = True break except: doconf = True if doconf or int(SCons.Script.ARGUMENTS.get("reconfigure", "0")) != 0: # Only rewrite cfgc when strictly needed if doconf: with open(cfgc, "w") as f: pprint.pprint(opts, stream=f) if os.path.isfile(makef): os.remove(makef) # Could be a autogen.sh script too acins = [] if os.path.isfile(conff + ".ac"): acins = [conff + ".ac"] elif os.path.isfile(agenf): acins = [agenf] if acins: # Don't clean generated configure env.NoClean(env.Autoconf([conff], acins)) cins = settings.get("automake-cfgs", []) cins.append(conff) cins.append(cfgc) cins.extend(automake.AdditionalConfigureDependencies(name)) cout = [makef] env.AutomakeConfigure(cout, cins) bins = settings.get("automake-srcs", []) bins.extend(cout) expected_outputs = settings.get("automake-outputs", []) expected_outputs = map( lambda x: (x if os.path.isabs(x) else (excons.OutputBaseDirectory() + "/" + x)), expected_outputs) actual_outputs = automake.Outputs(name) bout = list(set(actual_outputs).union( set(expected_outputs))) + [automake.OutputsCachePath(name)] out = env.Automake(bout, bins) automake.CleanOne(name) return out
def SetupEnvironment(env, settings): if sys.platform == "win32": return None name = settings["name"] debug = (excons.GetArgument("debug", 0, int) != 0) opts = settings.get("automake-opts", {}) agenf = excons.abspath("./autogen.sh") conff = excons.abspath("./configure") blddir = automake.BuildDir(name) makef = blddir + "/Makefile" cfgc = automake.ConfigCachePath(name) cexts = [".c", ".h", ".cc", ".hh", ".cpp", ".hpp", ".cxx", ".hxx"] # Override default C/C++ file scanner to avoid SCons being too nosy env.Prepend(SCANNERS=Scanner(function=DummyScanner, skeys=cexts)) env["AUTOMAKE_PROJECT"] = name env["AUTOMAKE_TOPDIR"] = excons.abspath(".") env["AUTOMAKE_OPTIONS"] = opts env["AUTOMAKE_TARGET"] = settings.get("automake-target", "install") env["AUTOMAKE_CONFIGURE"] = conff env["AUTOMAKE_AUTOGEN"] = agenf env["AUTOMAKE_MAKEFILE"] = makef env["AUTOMAKE_CONFIG_CACHE"] = cfgc env["BUILDERS"]["Autoconf"] = Builder(action=Action(AutoconfAction, "Running autoconf ...")) env["BUILDERS"]["AutomakeConfigure"] = Builder(action=Action(ConfigureAction, "Configure using Automake ...")) env["BUILDERS"]["Automake"] = Builder(action=Action(BuildAction, "Build using Automake ...")) # Check if we need to reconfigure if not GetOption("clean"): if not os.path.isdir(blddir): try: os.makedirs(blddir) except: return None doconf = True if os.path.isfile(cfgc): doconf = False with open(cfgc, "r") as f: try: d = eval(f.read()) for k, v in d.iteritems(): if not k in opts or opts[k] != v: doconf = True break if not doconf: for k, v in opts.iteritems(): if not k in d: doconf = True break except: doconf = True if doconf or int(ARGUMENTS.get("reconfigure", "0")) != 0: # Only rewrite cfgc when strictly needed if doconf: with open(cfgc, "w") as f: pprint.pprint(opts, stream=f) if os.path.isfile(makef): os.remove(makef) # Could be a autogen.sh script too acins = [] if os.path.isfile(conff+".ac"): acins = [conff+".ac"] elif os.path.isfile(agenf): acins = [agenf] if acins: # Don't clean generated configure env.NoClean(env.Autoconf([conff], acins)) cins = settings.get("automake-cfgs", []) cins.append(conff) cins.append(cfgc) cins.extend(automake.AdditionalConfigureDependencies(name)) cout = [makef] env.AutomakeConfigure(cout, cins) bins = settings.get("automake-srcs", []) bins.extend(cout) expected_outputs = settings.get("automake-outputs", []) expected_outputs = map(lambda x: (x if os.path.isabs(x) else (excons.OutputBaseDirectory() + "/" + x)), expected_outputs) actual_outputs = automake.Outputs(name) bout = list(set(actual_outputs).union(set(expected_outputs))) + [automake.OutputsCachePath(name)] out = env.Automake(bout, bins) automake.CleanOne(name) return out
def SetupEnvironment(env, settings): name = settings["name"] debug = (excons.GetArgument("debug", 0, int) != 0) opts = settings.get("cmake-opts", {}) flags = settings.get("cmake-flags", "") blddir = cmake.BuildDir(name) cmakec = blddir + "/CMakeCache.txt" cfgc = cmake.ConfigCachePath(name) cexts = [".c", ".h", ".cc", ".hh", ".cpp", ".hpp", ".cxx", ".hxx"] # Override default C/C++ file scanner to avoid SCons being too nosy env.Prepend( SCANNERS=SCons.Script.Scanner(function=DummyScanner, skeys=cexts)) env["CMAKE_PROJECT"] = name env["CMAKE_TOPDIR"] = excons.abspath(settings.get("cmake-root", ".")) env["CMAKE_OPTIONS"] = opts env["CMAKE_FLAGS"] = flags env["CMAKE_MIN_MSCVER"] = settings.get("cmake-min-mscver", None) env["CMAKE_CONFIG"] = settings.get("cmake-config", ("debug" if debug else "release")) env["CMAKE_TARGET"] = settings.get("cmake-target", "install") env["CMAKE_CACHE"] = cmakec env["CMAKE_CONFIG_CACHE"] = cfgc env["BUILDERS"]["CMakeConfigure"] = SCons.Script.Builder( action=SCons.Script.Action(ConfigureAction, "Configure using CMake ...")) env["BUILDERS"]["CMake"] = SCons.Script.Builder( action=SCons.Script.Action(BuildAction, "Build using CMake ...")) # Check if we need to reconfigure if not SCons.Script.GetOption("clean"): if not os.path.isdir(blddir): try: os.makedirs(blddir) except: return None doconf = True if os.path.isfile(cfgc): doconf = False with open(cfgc, "r") as f: try: d = eval(f.read()) for k, v in d.iteritems(): if not k in opts or opts[k] != v: doconf = True break if not doconf: for k, v in opts.iteritems(): if not k in d: doconf = True break except: doconf = True if doconf or int(SCons.Script.ARGUMENTS.get("reconfigure", "0")) != 0: # Only rewrite cfgc when strictly needed if doconf: with open(cfgc, "w") as f: pprint.pprint(opts, stream=f) if os.path.isfile(cmakec): os.remove(cmakec) cins = settings.get("cmake-cfgs", []) cins.append(cfgc) cins.extend(cmake.AdditionalConfigureDependencies(name)) cout = [cmakec] env.CMakeConfigure(cout, cins) bins = settings.get("cmake-srcs", []) bins.extend(cout) expected_outputs = settings.get("cmake-outputs", []) expected_outputs = map( lambda x: (x if os.path.isabs(x) else (excons.OutputBaseDirectory() + "/" + x)), expected_outputs) actual_outputs = cmake.Outputs(name) bout = list(set(actual_outputs).union( set(expected_outputs))) + [cmake.OutputsCachePath(name)] out = env.CMake(bout, bins) # Run clean last cmake.CleanOne(name) return out
def SetupEnvironment(env, settings): name = settings["name"] debug = (excons.GetArgument("debug", 0, int) != 0) opts = settings.get("cmake-opts", {}) blddir = cmake.BuildDir(name) cmakec = blddir + "/CMakeCache.txt" cfgc = cmake.ConfigCachePath(name) cexts = [".c", ".h", ".cc", ".hh", ".cpp", ".hpp", ".cxx", ".hxx"] # Override default C/C++ file scanner to avoid SCons being too nosy env.Prepend(SCANNERS=Scanner(function=DummyScanner, skeys=cexts)) env["CMAKE_PROJECT"] = name env["CMAKE_TOPDIR"] = excons.abspath(".") env["CMAKE_OPTIONS"] = opts env["CMAKE_MIN_MSCVER"] = settings.get("cmake-min-mscver", None) env["CMAKE_CONFIG"] = settings.get("cmake-config", ("debug" if debug else "release")) env["CMAKE_TARGET"] = settings.get("cmake-target", "install") env["CMAKE_CACHE"] = cmakec env["CMAKE_CONFIG_CACHE"] = cfgc env["BUILDERS"]["CMakeConfigure"] = Builder(action=Action(ConfigureAction, "Configure using CMake ...")) env["BUILDERS"]["CMake"] = Builder(action=Action(BuildAction, "Build using CMake ...")) # Check if we need to reconfigure if not GetOption("clean"): if not os.path.isdir(blddir): try: os.makedirs(blddir) except: return None doconf = True if os.path.isfile(cfgc): doconf = False with open(cfgc, "r") as f: try: d = eval(f.read()) for k, v in d.iteritems(): if not k in opts or opts[k] != v: doconf = True break if not doconf: for k, v in opts.iteritems(): if not k in d: doconf = True break except: doconf = True if doconf or int(ARGUMENTS.get("reconfigure", "0")) != 0: # Only rewrite cfgc when strictly needed if doconf: with open(cfgc, "w") as f: pprint.pprint(opts, stream=f) if os.path.isfile(cmakec): os.remove(cmakec) cins = settings.get("cmake-cfgs", []) cins.append(cfgc) cins.extend(cmake.AdditionalConfigureDependencies(name)) cout = [cmakec] env.CMakeConfigure(cout, cins) bins = settings.get("cmake-srcs", []) bins.extend(cout) expected_outputs = settings.get("cmake-outputs", []) expected_outputs = map(lambda x: (x if os.path.isabs(x) else (excons.OutputBaseDirectory() + "/" + x)), expected_outputs) actual_outputs = cmake.Outputs(name) bout = list(set(actual_outputs).union(set(expected_outputs))) + [cmake.OutputsCachePath(name)] out = env.CMake(bout, bins) # Run clean last cmake.CleanOne(name) return out