コード例 #1
0
ファイル: automake.py プロジェクト: tpoveda/excons
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
コード例 #2
0
ファイル: automake.py プロジェクト: gatgui/excons
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
コード例 #3
0
ファイル: cmake.py プロジェクト: mgear-dev/excons
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
コード例 #4
0
ファイル: cmake.py プロジェクト: gatgui/excons
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