示例#1
0
 def __init__(self, typeName=""):
     """constructor"""
     CraftBase.__init__(self)
     self.supportsNinja = False
     self.supportsCCACHE = craftSettings.getboolean(
         "Compile", "UseCCache", False) and craftCompiler.isMinGW()
     self.supportsClang = True
     self.buildSystemType = typeName
示例#2
0
    def environment(self):
        if self._environment is None:
            self._environment = {}

            mergeroot = self.toNativePath(CraftStandardDirs.craftRoot())
            if craftCompiler.isMSVC():
                ldflags = ""
                cflags = " -O2 -MD -GR -W3 -EHsc -D_USE_MATH_DEFINES -DWIN32_LEAN_AND_MEAN -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS"  # dynamic and exceptions enabled
                if craftCompiler.getMsvcPlatformToolset() > 120:
                    cflags += " -FS"
            else:
                ldflags = f"-L{mergeroot}/lib "
                cflags = f"-I{mergeroot}/include "

                if self.buildType == "RelWithDebInfo":
                    cflags += " -O2 -g "
                elif self.buildType == "Debug":
                    cflags += " -O0 -g3 "

            if OsDetection.isWin():
                self._environment["MSYS2_PATH_TYPE"] = "inherit"  # inherit the windows path
                if "make" in self._environment:
                    del self._environment["make"]
                if craftCompiler.isMinGW():
                    self._environment["MSYSTEM"] = f"MINGW{craftCompiler.bits}_CRAFT"
                elif craftCompiler.isMSVC():
                    self._environment["MSYSTEM"] = f"CYGWIN{craftCompiler.bits}_CRAFT"

                if craftCompiler.isMSVC():
                    if False:
                        cl = "clang-cl"
                    else:
                        cl = "cl"
                    self._environment["LIB"] = f"{os.environ['LIB']};{CraftStandardDirs.craftRoot()}\\lib"
                    self._environment["INCLUDE"] = f"{os.environ['INCLUDE']};{CraftStandardDirs.craftRoot()}\\include"
                    self._environment["LD"] = "link -NOLOGO"
                    self._environment["CC"] = "%s -nologo" % cl
                    self._environment["CXX"] = self._environment["CC"]
                    self._environment["CPP"] = "%s -nologo -EP" % cl
                    self._environment["CXXCPP"] = self._environment["CPP"]
                    self._environment["NM"] = "dumpbin -symbols"
                    self._environment["AR"] = "lib"
                    self._environment["WINDRES"] = "rc"
                    # self.environment[ "RC","rc-windres"
                    self._environment["STRIP"] = ":"
                    self._environment["RANLIB"] = ":"
                    self._environment["F77"] = "no"
                    self._environment["FC"] = "no"

            self._environment["PKG_CONFIG_PATH"] = self.toNativePath(
                os.path.join(CraftStandardDirs.craftRoot(), "lib", "pkgconfig"))


            self._environment["CFLAGS"] = cflags
            self._environment["CXXFLAGS"] = cflags
            self._environment["LDFLAGS"] = ldflags
        return self._environment
示例#3
0
    def makeProgram(self):
        if self.subinfo.options.make.supportsMultijob:
            if self.supportsNinja and craftSettings.getboolean(
                    "Compile", "UseNinja", False):
                return "ninja"
            if ("Compile", "MakeProgram") in craftSettings:
                craftDebug.log.debug(
                    "set custom make program: %s" %
                    craftSettings.get("Compile", "MakeProgram", ""))
                return craftSettings.get("Compile", "MakeProgram", "")
        elif not self.subinfo.options.make.supportsMultijob:
            if "MAKE" in os.environ:
                del os.environ["MAKE"]

        if OsUtils.isWin():
            if craftCompiler.isMSVC() or craftCompiler.isIntel():
                return "nmake /NOLOGO"
            elif craftCompiler.isMinGW():
                return "mingw32-make"
            else:
                craftDebug.log.critical(f"unknown {craftCompiler} compiler")
        elif OsUtils.isUnix():
            return "make"
示例#4
0
 def __makeFileGenerator(self):
     """return cmake related make file generator"""
     if self.makeProgram == "ninja":
         return "Ninja"
     if OsUtils.isWin():
         if craftCompiler.isMSVC() and not (
                 self.subinfo.options.cmake.useIDE or self.subinfo.options.
                 cmake.openIDE) or craftCompiler.isIntel():
             return "NMake Makefiles"
         else:
             if craftCompiler.isMSVC2017():
                 return "Visual Studio 15 2017" + (
                     " Win64" if craftCompiler.isX64() else "")
             elif craftCompiler.isMSVC2015():
                 return "Visual Studio 14 2015" + (
                     " Win64" if craftCompiler.isX64() else "")
             elif craftCompiler.isMSVC2010():
                 return "Visual Studio 10"
         if craftCompiler.isMinGW():
             return "MinGW Makefiles"
     elif OsUtils.isUnix():
         return "Unix Makefiles"
     else:
         craftDebug.log.critical(f"unknown {craftCompiler} compiler")
示例#5
0
    def setupEnvironment(self):
        for var, value in craftSettings.getSection("Environment"):  # set and overide existing values
            self.addEnvVar(var, value)
        self.prependPath("PATH", os.path.dirname(sys.executable))
        self.getEnv()
        self.checkForEvilApplication()

        self.addEnvVar("KDEROOT", CraftStandardDirs.craftRoot())

        if craftSettings.getboolean("Compile", "UseCCache", False):
            self.addEnvVar("CCACHE_DIR",
                           craftSettings.get("Paths", "CCACHE_DIR", os.path.join(CraftStandardDirs.craftRoot(),
                                                                                 "build", "CCACHE")))

        if self.version < 2:
            self.addEnvVar("GIT_SSH", "plink")
            self.addEnvVar("SVN_SSH", "plink")

        if not "HOME" in os.environ:
            self.addEnvVar("HOME", os.getenv("USERPROFILE"))

        self.prependPath("PKG_CONFIG_PATH", os.path.join(CraftStandardDirs.craftRoot(), "lib", "pkgconfig"))

        self.prependPath("QT_PLUGIN_PATH", [os.path.join(CraftStandardDirs.craftRoot(), "plugins"),
                                            os.path.join(CraftStandardDirs.craftRoot(), "lib", "plugins"),
                                            os.path.join(CraftStandardDirs.craftRoot(), "lib64", "plugins"),
                                            os.path.join(CraftStandardDirs.craftRoot(), "lib", "x86_64-linux-gnu",
                                                         "plugins"),
                                            os.path.join(CraftStandardDirs.craftRoot(), "lib", "plugin")
                                            ])

        self.prependPath("QML2_IMPORT_PATH", [os.path.join(CraftStandardDirs.craftRoot(), "qml"),
                                              os.path.join(CraftStandardDirs.craftRoot(), "lib", "qml"),
                                              os.path.join(CraftStandardDirs.craftRoot(), "lib64", "qml"),
                                              os.path.join(CraftStandardDirs.craftRoot(), "lib", "x86_64-linux-gnu",
                                                           "qml")
                                              ])
        self.prependPath("QML_IMPORT_PATH", os.environ["QML2_IMPORT_PATH"])

        if OsUtils.isUnix():
            self.prependPath("LD_LIBRARY_PATH", [os.path.join(CraftStandardDirs.craftRoot(), "lib"),
                                                 os.path.join(CraftStandardDirs.craftRoot(), "lib",
                                                              "x86_64-linux-gnu")])
        if OsUtils.isMac():
            self.prependPath("DYLD_LIBRARY_PATH", [os.path.join(CraftStandardDirs.craftRoot(), "lib")])

        self.setXDG()

        if craftSettings.getboolean("QtSDK", "Enabled", "false"):
            self.prependPath("PATH",
                             os.path.join(craftSettings.get("QtSDK", "Path"), craftSettings.get("QtSDK", "Version"),
                                          craftSettings.get("QtSDK", "Compiler"), "bin"))

        if craftCompiler.isMinGW():
            if not craftSettings.getboolean("QtSDK", "Enabled", "false"):
                if craftCompiler.isX86():
                    self.prependPath("PATH", os.path.join(CraftStandardDirs.craftRoot(), "mingw", "bin"))
                else:
                    self.prependPath("PATH", os.path.join(CraftStandardDirs.craftRoot(), "mingw64", "bin"))
            else:
                compilerName = craftSettings.get("QtSDK", "Compiler")
                compilerMap = {"mingw53_32": "mingw530_32"}
                self.prependPath("PATH", os.path.join(craftSettings.get("QtSDK", "Path"), "Tools",
                                                      compilerMap.get(compilerName, compilerName), "bin"))

        if OsUtils.isUnix():
            self.prependPath("PATH", CraftStandardDirs.craftBin())
        self.prependPath("PATH", os.path.join(CraftStandardDirs.craftRoot(), "dev-utils", "bin"))

        # make sure thate craftroot bin is the first to look for dlls etc
        self.prependPath("PATH", os.path.join(CraftStandardDirs.craftRoot(), "bin"))

        # add python site packages to pythonpath
        self.prependPath("PythonPath", os.path.join(CraftStandardDirs.craftRoot(), "lib", "site-packages"))