Пример #1
0
    def setDependencies(self):
        self.runtimeDependencies["virtual/base"] = None
        self.buildDependencies["kde/frameworks/extra-cmake-modules"] = None
        self.runtimeDependencies["libs/qt5/qtbase"] = None
        self.runtimeDependencies["kde/frameworks/tier1/kconfig"] = None
        self.runtimeDependencies["kde/frameworks/tier2/kdoctools"] = None
        self.runtimeDependencies["kde/frameworks/tier1/kguiaddons"] = None
        self.runtimeDependencies["kde/frameworks/tier1/ki18n"] = None
        self.runtimeDependencies["kde/frameworks/tier3/kinit"] = None
        self.runtimeDependencies["kde/frameworks/tier2/kjobwidgets"] = None
        self.runtimeDependencies["kde/frameworks/tier3/kio"] = None
        self.runtimeDependencies["kde/frameworks/tier3/kparts"] = None
        self.runtimeDependencies["kde/frameworks/tier3/ktexteditor"] = None
        self.runtimeDependencies["kde/frameworks/tier1/kwindowsystem"] = None
        self.runtimeDependencies["kde/frameworks/tier3/kxmlgui"] = None
        self.runtimeDependencies["kde/frameworks/tier1/kdbusaddons"] = None
        self.runtimeDependencies["kde/frameworks/tier1/kitemmodels"] = None
        self.runtimeDependencies["kde/frameworks/tier3/kactivities"] = None
        self.runtimeDependencies["kde/frameworks/tier1/threadweaver"] = None
        self.runtimeDependencies["kde/frameworks/tier3/knewstuff"] = None
        if self.options.dynamic.fullPlasma:
            self.runtimeDependencies["kde/frameworks/tier3/plasma-framework"] = None
        if OsUtils.isUnix():
            self.runtimeDependencies["kde/applications/konsole"] = None

        # try to use Breeze style as Windows style has severe issues for e.g. scaling
        self.runtimeDependencies["kde/plasma/breeze"] = None
Пример #2
0
 def setDependencies(self):
     self.runtimeDependencies["virtual/base"] = "default"
     self.buildDependencies["frameworks/extra-cmake-modules"] = "default"
     self.runtimeDependencies["libs/qt5/qtbase"] = "default"
     self.runtimeDependencies["frameworks/tier1/kconfig"] = "default"
     self.runtimeDependencies["frameworks/tier2/kdoctools"] = "default"
     self.runtimeDependencies["frameworks/tier1/kguiaddons"] = "default"
     self.runtimeDependencies["frameworks/tier1/ki18n"] = "default"
     self.runtimeDependencies["frameworks/tier3/kinit"] = "default"
     self.runtimeDependencies["frameworks/tier2/kjobwidgets"] = "default"
     self.runtimeDependencies["frameworks/tier3/kio"] = "default"
     self.runtimeDependencies["frameworks/tier3/kparts"] = "default"
     self.runtimeDependencies["frameworks/tier3/ktexteditor"] = "default"
     self.runtimeDependencies["frameworks/tier1/kwindowsystem"] = "default"
     self.runtimeDependencies["frameworks/tier3/kxmlgui"] = "default"
     self.runtimeDependencies["frameworks/tier1/kdbusaddons"] = "default"
     self.runtimeDependencies["frameworks/tier1/kitemmodels"] = "default"
     self.runtimeDependencies["frameworks/tier3/kactivities"] = "default"
     if self.options.features.fullplasma:
         self.runtimeDependencies[
             "frameworks/tier3/plasma-framework"] = "default"
     self.runtimeDependencies["frameworks/tier1/threadweaver"] = "default"
     self.runtimeDependencies["frameworks/tier3/knewstuff"] = "default"
     if OsUtils.isUnix():
         self.runtimeDependencies["kde/applications/konsole"] = "default"
Пример #3
0
    def makeProgram(self) -> str:
        if self.subinfo.options.make.supportsMultijob:
            if self.supportsNinja and CraftCore.settings.getboolean(
                    "Compile", "UseNinja",
                    False) and CraftCore.cache.findApplication("ninja"):
                return "ninja"
            if ("Compile", "MakeProgram") in CraftCore.settings:
                makeProgram = CraftCore.settings.get("Compile", "MakeProgram")
                CraftCore.log.debug(f"set custom make program: {makeProgram}")
                makeProgram = CraftCore.cache.findApplication(makeProgram)
                if makeProgram:
                    return makeProgram
                else:
                    CraftCore.log.warning(
                        f"Failed to find {CraftCore.settings.get('Compile', 'MakeProgram')}"
                    )
        elif not self.subinfo.options.make.supportsMultijob:
            if "MAKE" in os.environ:
                del os.environ["MAKE"]

        if OsUtils.isWin():
            if CraftCore.compiler.isMSVC() or CraftCore.compiler.isIntel():
                return "nmake"
            elif CraftCore.compiler.isMinGW():
                return "mingw32-make"
            else:
                CraftCore.log.critical(
                    f"unknown {CraftCore.compiler} compiler")
        elif OsUtils.isUnix():
            return "make"
Пример #4
0
    def _compress(self,
                  archiveName,
                  sourceDir,
                  destDir,
                  createDigests=True) -> bool:
        archive = os.path.join(destDir, archiveName)
        utils.createDir(os.path.dirname(archive))
        if os.path.isfile(archive):
            utils.deleteFile(archive)
        if OsUtils.isUnix():
            if not self.__xz(archive, sourceDir):
                return False
        else:
            if not self.__7z(archive, sourceDir):
                return False

        if createDigests:
            if not CraftCore.settings.getboolean("Packager", "CreateCache"):
                self._generateManifest(destDir, archiveName)
                CraftHash.createDigestFiles(archive)
            else:
                if CraftCore.settings.getboolean("ContinuousIntegration",
                                                 "UpdateRepository", False):
                    manifestUrls = [self.cacheRepositoryUrls()[0]]
                else:
                    manifestUrls = None
                self._generateManifest(destDir,
                                       archiveName,
                                       manifestLocation=self.cacheLocation(),
                                       manifestUrls=manifestUrls)
        return True
Пример #5
0
    def install(self):

        # create post (un)install scripts
        if OsUtils.isWin():
            scriptExt = ".cmd"
        elif OsUtils.isUnix():
            scriptExt = ".sh"
        for pkgtype in ['bin', 'lib', 'doc', 'src', 'dbg']:
            script = os.path.join(self.packageDir(),
                                  "post-install-%s.%s") % (pkgtype, scriptExt)
            scriptName = "post-install-%s-%s.%s" % (self.package, pkgtype,
                                                    scriptExt)
            # are there any cases there installDir should be honored ?
            destscript = os.path.join(self.imageDir(), "manifest", scriptName)
            if not os.path.exists(os.path.join(self.imageDir(), "manifest")):
                utils.createDir(os.path.join(self.imageDir(), "manifest"))
            if os.path.exists(script):
                utils.copyFile(script, destscript)
            script = os.path.join(
                self.packageDir(),
                "post-uninstall-%s.%s") % (pkgtype, scriptExt)
            scriptName = "post-uninstall-%s-%s.%s" % (self.package, pkgtype,
                                                      scriptExt)
            # are there any cases there installDir should be honored ?
            destscript = os.path.join(self.imageDir(), "manifest", scriptName)
            if not os.path.exists(os.path.join(self.imageDir(), "manifest")):
                utils.createDir(os.path.join(self.imageDir(), "manifest"))
            if os.path.exists(script):
                utils.copyFile(script, destscript)
        return True
Пример #6
0
 def setXDG(self):
     self.prependPath("XDG_DATA_DIRS", [os.path.join(CraftStandardDirs.craftRoot(), "share")])
     if OsUtils.isUnix():
         self.prependPath("XDG_CONFIG_DIRS", [os.path.join(CraftStandardDirs.craftRoot(), "etc", "xdg")])
         self.addEnvVar("XDG_DATA_HOME",
                        os.path.join(CraftStandardDirs.craftRoot(), "home", os.getenv("USER"), ".local5", "share"))
         self.addEnvVar("XDG_CONFIG_HOME",
                        os.path.join(CraftStandardDirs.craftRoot(), "home", os.getenv("USER"), ".config"))
         self.addEnvVar("XDG_CACHE_HOME",
                        os.path.join(CraftStandardDirs.craftRoot(), "home", os.getenv("USER"), ".cache"))
Пример #7
0
 def __makeFileGenerator(self):
     """return cmake related make file generator"""
     if self.makeProgram == "ninja":
         return "Ninja"
     if OsUtils.isWin():
         if CraftCore.compiler.isMSVC() and not CraftCore.compiler.isIntel():
             return "NMake Makefiles"
         if CraftCore.compiler.isMinGW():
             return "MinGW Makefiles"
     elif OsUtils.isUnix():
         return "Unix Makefiles"
     else:
         CraftCore.log.critical(f"unknown {CraftCore.compiler} compiler")
Пример #8
0
def copyDir(srcdir,
            destdir,
            linkOnly=craftSettings.getboolean("General", "UseHardlinks",
                                              False),
            copiedFiles=None):
    """ copy directory from srcdir to destdir """
    craftDebug.log.debug("copyDir called. srcdir: %s, destdir: %s" %
                         (srcdir, destdir))

    if (not srcdir.endswith(os.path.sep)):
        srcdir += os.path.sep
    if (not destdir.endswith(os.path.sep)):
        destdir += os.path.sep

    for root, dirNames, files in os.walk(srcdir):
        # do not copy files under .svn directories, because they are write-protected
        # and the they cannot easily be deleted...
        if (root.find(".svn") == -1):
            tmpdir = root.replace(srcdir, destdir)
            if not os.path.exists(tmpdir):
                os.makedirs(tmpdir)
            for fileName in files:
                # symlinks to files are included in `files`
                if copyFile(os.path.join(root, fileName),
                            os.path.join(tmpdir, fileName),
                            linkOnly=linkOnly) and copiedFiles != None:
                    copiedFiles.append(os.path.join(tmpdir, fileName))

            if OsUtils.isUnix():
                for dirName in dirNames:
                    # symlinks to directories are included in `dirNames` -- we only want to copy the symlinks
                    srcPath = os.path.join(root, dirName)
                    if os.path.islink(srcPath):
                        linkTo = os.readlink(srcPath)
                        if os.path.isabs(linkTo):
                            craftDebug.log.warning(
                                f"Not copying symlink targeting an absolute path -- not supported: {srcPath}"
                            )
                            continue

                        newLinkName = os.path.join(tmpdir, dirName)
                        if os.path.exists(newLinkName):
                            continue

                        # re-create exact same symlink, but this time in the destdir
                        if createSymlink(os.path.join(tmpdir, linkTo),
                                         newLinkName) and copiedFiles != None:
                            copiedFiles.append(newLinkName)

    return True
Пример #9
0
    def _createShortPath(longPath) -> str:
        if not CraftShortPath._useShortpaths:
            return longPath
        import utils
        utils.createDir(CraftCore.standardDirs.junctionsDir())
        longPath = OsUtils.toNativePath(longPath)
        path = CraftCore.standardDirs.junctionsDir() / hex(
            zlib.crc32(bytes(longPath, "UTF-8")))[2:]
        delta = len(longPath) - len(str(path))
        if delta <= 0:
            CraftCore.debug.log.debug(
                f"Using junctions for {longPath} wouldn't save characters returning original path"
            )
            CraftCore.debug.log.debug(f"{longPath}\n" f"{path}, gain: {delta}")
            return longPath
        utils.createDir(longPath)
        if not os.path.isdir(path):
            if OsUtils.isUnix():
                ok = utils.createSymlink(longPath,
                                         path,
                                         useAbsolutePath=True,
                                         targetIsDirectory=True)
            else:
                # note: mklink is a CMD command => needs shell
                ok = utils.system(["mklink", "/J", path, longPath],
                                  shell=True,
                                  stdout=subprocess.DEVNULL,
                                  logCommand=False)

            if not ok:
                CraftCore.debug.log.critical(
                    f"Could not create shortpath {path}, for {longPath}")
                return longPath
        else:
            if not os.path.samefile(path, longPath):
                CraftCore.debug.log.critical(
                    f"Existing short path {path}, did not match {longPath}")
                return longPath
        CraftCore.debug.log.debug(f"Mapped \n"
                                  f"{longPath} to\n"
                                  f"{path}, gained {delta}")
        return path
Пример #10
0
    def install(self):
        """install the target"""
        if OsUtils.isUnix():
            if not os.path.exists(self.installDir()):
                os.makedirs(self.installDir())
            utils.copyDir(self.buildDir(), self.installDir())
            return BuildSystemBase.install(self)
        else:
            if not BuildSystemBase.install(self):
                return False

            for root, dirs, files in os.walk(self.buildDir()):
                for f in files:
                    if f.endswith(".dll"):
                        utils.copyFile(os.path.join(root, f), os.path.join(self.imageDir(), "lib", f))
                        utils.copyFile(os.path.join(root, f), os.path.join(self.imageDir(), "bin", f))
                    elif f.endswith(".a") or f.endswith(".lib"):
                        utils.copyFile(os.path.join(root, f), os.path.join(self.imageDir(), "lib", f))

            return True
Пример #11
0
    def makeProgram(self) -> str:
        if self.subinfo.options.make.supportsMultijob:
            if self.supportsNinja and CraftCore.settings.getboolean("Compile", "UseNinja", False):
                return "ninja"
            if ("Compile", "MakeProgram") in CraftCore.settings:
                CraftCore.log.debug("set custom make program: %s" % CraftCore.settings.get("Compile", "MakeProgram", ""))
                return CraftCore.settings.get("Compile", "MakeProgram", "")
        elif not self.subinfo.options.make.supportsMultijob:
            if "MAKE" in os.environ:
                del os.environ["MAKE"]

        if OsUtils.isWin():
            if CraftCore.compiler.isMSVC() or CraftCore.compiler.isIntel():
                return "nmake"
            elif CraftCore.compiler.isMinGW():
                return "mingw32-make"
            else:
                CraftCore.log.critical(f"unknown {CraftCore.compiler} compiler")
        elif OsUtils.isUnix():
            return "make"
Пример #12
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")
Пример #13
0
    def setupEnvironment(self):
        originaleEnv = CaseInsensitiveDict(os.environ)
        for var, value in CraftCore.settings.getSection(
                "Environment"):  # set and override existing values
            # the ini is case insensitive so sections are lowercase....
            self.addEnvVar(var.upper(), value)
        self.prependEnvVar("PATH", os.path.dirname(sys.executable))
        os.environ.update(self.getEnv())

        self.addEnvVar("KDEROOT", CraftCore.standardDirs.craftRoot())
        self.addEnvVar(
            "SSL_CERT_FILE",
            os.path.join(CraftCore.standardDirs.etcDir(), "cacert.pem"))
        self.addEnvVar(
            "REQUESTS_CA_BUNDLE",
            os.path.join(CraftCore.standardDirs.etcDir(), "cacert.pem"))

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

        if CraftCore.settings.getboolean("QtSDK", "Enabled", "false"):
            sdkPath = os.path.join(CraftCore.settings.get("QtSDK", "Path"),
                                   CraftCore.settings.get("QtSDK", "Version"),
                                   CraftCore.settings.get("QtSDK", "Compiler"),
                                   "bin")
            if not os.path.exists(sdkPath):
                log(f"Please ensure that you have installed the Qt SDK in {sdkPath}",
                    critical=True)
            self.prependEnvVar("PATH", sdkPath)

        if OsUtils.isWin():
            self._setupWin()
        elif OsUtils.isMac():
            self._setupMac()
        else:
            self._setupUnix()

        PKG_CONFIG_PATH = collections.OrderedDict.fromkeys([
            os.path.join(CraftCore.standardDirs.craftRoot(), "lib",
                         "pkgconfig")
        ])
        if "PKG_CONFIG_PATH" in originaleEnv:
            PKG_CONFIG_PATH.update(
                collections.OrderedDict.fromkeys(
                    originaleEnv["PKG_CONFIG_PATH"].split(os.path.pathsep)))
        else:
            pkgCOnfig = shutil.which("pkg-config", path=originaleEnv["PATH"])
            if pkgCOnfig:
                out = self._getOutput(
                    "pkg-config --variable pc_path pkg-config", shell=True)
                if out[0] == 0:
                    PKG_CONFIG_PATH.update(
                        collections.OrderedDict.fromkeys(out[1].split(
                            os.path.pathsep)))
        self.prependEnvVar("PKG_CONFIG_PATH",
                           os.path.pathsep.join(PKG_CONFIG_PATH.keys()))

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

        self.prependEnvVar("QML2_IMPORT_PATH", [
            os.path.join(CraftCore.standardDirs.craftRoot(), "qml"),
            os.path.join(CraftCore.standardDirs.craftRoot(), "lib", "qml"),
            os.path.join(CraftCore.standardDirs.craftRoot(), "lib64", "qml"),
            os.path.join(CraftCore.standardDirs.craftRoot(), "lib",
                         "x86_64-linux-gnu", "qml")
        ])
        self.prependEnvVar("QML_IMPORT_PATH", os.environ["QML2_IMPORT_PATH"])
        self.prependEnvVar("QT_DATA_DIRS",
                           CraftCore.standardDirs.locations.data)

        if CraftCore.settings.getboolean("General", "UseSandboxConfig", True):
            self.setXDG()

        self.prependEnvVar("PATH", CraftCore.standardDirs.craftBin())

        # add python site packages to pythonpath
        self.prependEnvVar(
            "PYTHONPATH",
            os.path.join(CraftCore.standardDirs.craftRoot(), "lib",
                         "site-packages"))

        # prepend our venv python
        self.prependEnvVar("PATH", [
            os.path.join(CraftCore.standardDirs.etcDir(), f"virtualenv", "3",
                         "Scripts" if CraftCore.compiler.isWindows else "bin"),
            os.path.join(CraftCore.standardDirs.etcDir(), f"virtualenv", "2",
                         "Scripts" if CraftCore.compiler.isWindows else "bin")
        ])

        # make sure that craftroot bin is the first to look for dlls etc
        self.prependEnvVar(
            "PATH", os.path.join(CraftCore.standardDirs.craftRoot(), "bin"))
        self.prependEnvVar(
            "PATH",
            os.path.join(CraftCore.standardDirs.craftRoot(), "dev-utils",
                         "bin"))

        if CraftCore.compiler.isClang():
            if OsUtils.isUnix() and CraftCore.settings.getboolean(
                    "General", "UseSystemClang", True):
                self.addEnvVar("CC", "/usr/bin/clang")
                self.addEnvVar("CXX", "/usr/bin/clang++")
            else:
                if CraftCore.compiler.isMSVC():
                    self.addEnvVar("CC", "clang-cl")
                    self.addEnvVar("CXX", "clang-cl")
                else:
                    self.addEnvVar("CC", "clang")
                    self.addEnvVar("CXX", "clang")
        elif CraftCore.compiler.isGCC():
            if not CraftCore.compiler.isNative() and CraftCore.compiler.isX86(
            ):
                self.addEnvVar("CC", "gcc -m32")
                self.addEnvVar("CXX", "g++ -m32")
                self.addEnvVar("AS", "gcc -c -m32")
            else:
                self.addEnvVar("CC", "gcc")
                self.addEnvVar("CXX", "g++")

        if CraftCore.settings.getboolean(
                "General", "AllowAnsiColor", not CraftCore.settings.getboolean(
                    "ContinuousIntegration", "Enabled", False)):
            # different non standard env switches
            self.addEnvVar("CLICOLOR_FORCE", "1")
            self.addEnvVar("CLICOLOR", "1")
            self.addEnvVar("ANSICON", "1")
            if CraftCore.compiler.isClang() and CraftCore.compiler.isMSVC():
                self.prependEnvVar("CFLAGS",
                                   "-fcolor-diagnostics -fansi-escape-codes",
                                   sep=" ")
                self.prependEnvVar("CXXFLAGS",
                                   "-fcolor-diagnostics -fansi-escape-codes",
                                   sep=" ")
            elif CraftCore.compiler.isGCCLike():
                self.prependEnvVar("CFLAGS",
                                   "-fdiagnostics-color=always",
                                   sep=" ")
                self.prependEnvVar("CXXFLAGS",
                                   "-fdiagnostics-color=always",
                                   sep=" ")

            if OsUtils.isWin():
                self.addEnvVar(
                    "TERM",
                    "xterm-256color")  # pretend to be a common smart terminal
Пример #14
0
    def setupEnvironment(self):
        for var, value in CraftCore.settings.getSection(
                "Environment"):  # set and override existing values
            # the ini is case insensitive so sections are lowercase....
            self.addEnvVar(var.upper(), value)
        self.prependEnvVar("PATH", os.path.dirname(sys.executable))
        os.environ = self.getEnv()
        self.checkForEvilApplication()

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

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

        if OsUtils.isWin():
            self._setupWin()
        else:
            self.setXDG()

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

        self.prependEnvVar("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.prependEnvVar("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.prependEnvVar("QML_IMPORT_PATH", os.environ["QML2_IMPORT_PATH"])

        self.setXDG()

        self.prependEnvVar("PATH", CraftStandardDirs.craftBin())

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

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

        if CraftCore.compiler.isClang():
            if OsUtils.isUnix():
                self.addEnvVar("CC", "/usr/bin/clang")
                self.addEnvVar("CXX", "/usr/bin/clang++")
            else:
                if CraftCore.compiler.isMSVC():
                    self.addEnvVar("CC", "clang-cl")
                    self.addEnvVar("CXX", "clang-cl")
                else:
                    self.addEnvVar("CC", "clang")
                    self.addEnvVar("CXX", "clang")

        if CraftCore.settings.getboolean("General", "AllowAnsiColor", False):
            self.addEnvVar("CLICOLOR_FORCE", "1")
            self.addEnvVar("CLICOLOR", "1")
            if CraftCore.compiler.isClang() and CraftCore.compiler.isMSVC():
                self.prependEnvVar("CFLAGS", "-fcolor-diagnostics", sep=" ")
                self.prependEnvVar("CXXFLAGS", "-fcolor-diagnostics", sep=" ")
            elif CraftCore.compiler.isGCCLike():
                self.prependEnvVar("CFLAGS",
                                   "-fdiagnostics-color=always",
                                   sep=" ")
                self.prependEnvVar("CXXFLAGS",
                                   "-fdiagnostics-color=always",
                                   sep=" ")

            if OsUtils.isWin():
                os.environ[
                    "TERM"] = "xterm"  # pretend to be a common smart terminal
Пример #15
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"))