diff --git a/bin/CraftSetupHelper.py b/bin/CraftSetupHelper.py --- a/bin/CraftSetupHelper.py +++ b/bin/CraftSetupHelper.py @@ -269,15 +269,6 @@ if not "HOME" in os.environ: self.addEnvVar("HOME", os.getenv("USERPROFILE")) - - 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 CraftCore.compiler.isMinGW(): if not CraftCore.settings.getboolean("QtSDK", "Enabled", "false"): if CraftCore.compiler.isX86(): @@ -321,6 +312,14 @@ CraftCore.settings.get("Paths", "CCACHE_DIR", os.path.join(CraftStandardDirs.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() else: diff --git a/bin/Packager/CollectionPackagerBase.py b/bin/Packager/CollectionPackagerBase.py --- a/bin/Packager/CollectionPackagerBase.py +++ b/bin/Packager/CollectionPackagerBase.py @@ -108,7 +108,7 @@ for line in entry(): self._whitelist.append(line) else: - self.read_whitelist(entry) + self._whitelist.append(self.read_whitelist(entry)) return self._whitelist @property @@ -119,13 +119,13 @@ if callable(entry): if entry == PackagerLists.runtimeBlacklist: CraftCore.log.warn("Compat mode for PackagerLists.runtimeBlacklist -- please just use self.blacklist_file.append(\"myblacklist.txt\") instead of self.blacklist_file = [...]") - self.read_blacklist(entry()) + self._blacklist.append(self.read_blacklist(entry())) continue for line in entry(): self._blacklist.append(line) else: - self.read_blacklist(entry) + self._blacklist.append(self.read_blacklist(entry)) return self._blacklist def __imageDirPattern(self, package, buildTarget): @@ -157,37 +157,37 @@ return imageDirs - def read_whitelist(self, fname): + def read_whitelist(self, fname : str) -> re: if not os.path.isabs(fname): fname = os.path.join(self.packageDir(), fname) """ Read regular expressions from fname """ try: - self._whitelist.append(toRegExp(fname, "whitelist")) + return toRegExp(fname, "whitelist") except Exception as e: raise BlueprintException(str(e), self.package) - def read_blacklist(self, fname): + def read_blacklist(self, fname : str) -> re: if not os.path.isabs(fname): fname = os.path.join(self.packageDir(), fname) """ Read regular expressions from fname """ try: - self._blacklist.append(toRegExp(fname, "blacklist")) + return toRegExp(fname, "blacklist") except Exception as e: raise BlueprintException(str(e), self.package) - def whitelisted(self, pathname): + def whitelisted(self, pathname : str, whiteList : [re]=None) -> bool: """ return True if pathname is included in the pattern, and False if not """ - for pattern in self.whitelist: - if pattern.search(pathname): - CraftCore.log.debug(f"{pathname} is whitelisted: {pattern.pattern}") - return True - return False + if whiteList is None: + whiteList = self.whitelist + return self.blacklisted(pathname, blackList=whiteList, message="whitelisted") - def blacklisted(self, filename): + def blacklisted(self, filename : str, blackList : [re]=None, message : str="blacklisted") -> bool: """ return False if file is not blacklisted, and True if it is blacklisted """ - for pattern in self.blacklist: + if blackList is None: + blackList = self.blacklist + for pattern in blackList: if pattern.search(filename): - CraftCore.log.debug(f"{filename} is blacklisted: {pattern.pattern}") + CraftCore.log.debug(f"{filename} is {message}: {pattern.pattern}") return True return False @@ -231,8 +231,6 @@ filename that the function whitelist returns as true and which do not match blacklist entries """ - if blacklist(root) and not whitelist(root): - return dirs = [root] while dirs: path = dirs.pop() diff --git a/bin/Packager/MacDMGPackager.py b/bin/Packager/MacDMGPackager.py --- a/bin/Packager/MacDMGPackager.py +++ b/bin/Packager/MacDMGPackager.py @@ -76,6 +76,16 @@ if not utils.system(["macdeployqt", appPath, "-always-overwrite", "-verbose=1"]): return False + # macdeployqt might just have added some explicitly blacklisted files + blackList = Path(self.packageDir(), "mac_blacklist.txt") + if blackList.exists(): + blackList = [self.read_blacklist(str(blackList))] + # use it as whitelist as we want only matches, ignore all others + matches = self.traverse(appPath, whitelist=lambda x:self.blacklisted(x, blackList), blacklist=lambda x:True) + for f in matches: + CraftCore.log.info(f"Remove blacklisted file: {f}") + utils.deleteFile(f) + # macdeployqt adds some more plugins so we fix the plugins after calling macdeployqt dylibbundler.checkedLibs = set() # ensure we check all libs again (but # we should not need to make any changes)