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
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
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"
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")
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"))