From 59e130a18bed9b356d64d7acb6927184c3bbb098 Mon Sep 17 00:00:00 2001 From: System-Arch <33330183+System-Arch@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:34:49 -0500 Subject: [PATCH 1/7] msys2: Conan 2.0 compatibility tweaks --- recipes/msys2/all/conanfile.py | 31 +++++++++++---------- recipes/msys2/all/test_package/conanfile.py | 2 +- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/recipes/msys2/all/conanfile.py b/recipes/msys2/all/conanfile.py index 335f7da9b6296..c936f20112634 100644 --- a/recipes/msys2/all/conanfile.py +++ b/recipes/msys2/all/conanfile.py @@ -1,6 +1,7 @@ from conan import ConanFile from conan.errors import ConanInvalidConfiguration, ConanException -from conan.tools.files import chdir, get, replace_in_file +from conan.tools.files import chdir, get, replace_in_file, copy +from conan.tools.layout import basic_layout import fnmatch import os import shutil @@ -52,7 +53,7 @@ class MSYS2Conan(ConanFile): options = { "exclude_files": ["ANY"], "packages": ["ANY"], - "additional_packages": ["ANY"], + "additional_packages": [None, "ANY"], } default_options = { "exclude_files": "*/link.exe", @@ -72,12 +73,15 @@ def validate(self): if self.info.settings.arch != "x86_64": raise ConanInvalidConfiguration("Only Windows x64 supported") + def layout(self): + basic_layout(self, src_folder="src") + def source(self): - # sources are different per configuration - do download in build - pass + get(self, **self.conan_data["sources"][self.version], + destination=self.source_folder, strip_root=True) def _update_pacman(self): - with chdir(self, os.path.join(self._msys_dir, "usr", "bin")): + with chdir(self, os.path.join(self.source_folder, "usr", "bin")): try: self._kill_pacman() @@ -122,12 +126,9 @@ def _kill_pacman(self): @property def _msys_dir(self): - subdir = "msys64" - return os.path.join(self.package_folder, "bin", subdir) + return "msys64" def build(self): - get(self, **self.conan_data["sources"][self.version], - destination=os.path.join(self.package_folder, "bin")) with lock(): self._do_build() @@ -140,7 +141,7 @@ def _do_build(self): self._update_pacman() - with chdir(self, os.path.join(self._msys_dir, "usr", "bin")): + with chdir(self, os.path.join(self.source_folder, "usr", "bin")): for package in packages: self.run(f'bash -l -c "pacman -S {package} --noconfirm"') for package in ['pkgconf']: @@ -150,7 +151,7 @@ def _do_build(self): # create /tmp dir in order to avoid # bash.exe: warning: could not find /tmp, please create! - tmp_dir = os.path.join(self._msys_dir, 'tmp') + tmp_dir = os.path.join(self.source_folder, 'tmp') if not os.path.isdir(tmp_dir): os.makedirs(tmp_dir) tmp_name = os.path.join(tmp_dir, 'dummy') @@ -158,21 +159,21 @@ def _do_build(self): os.utime(tmp_name, None) # Prepend the PKG_CONFIG_PATH environment variable with an eventual PKG_CONFIG_PATH environment variable - replace_in_file(self, os.path.join(self._msys_dir, "etc", "profile"), + replace_in_file(self, os.path.join(self.source_folder, "etc", "profile"), 'PKG_CONFIG_PATH="', 'PKG_CONFIG_PATH="$PKG_CONFIG_PATH:') def package(self): excludes = None if self.options.exclude_files: excludes = tuple(str(self.options.exclude_files).split(",")) - #self.copy("*", dst="bin", src=self._msys_dir, excludes=excludes) for exclude in excludes: for root, _, filenames in os.walk(self._msys_dir): for filename in filenames: fullname = os.path.join(root, filename) if fnmatch.fnmatch(fullname, exclude): os.unlink(fullname) - shutil.copytree(os.path.join(self._msys_dir, "usr", "share", "licenses"), + copy(self, "*", dst=os.path.join(self.package_folder, self._msys_dir), src=self.source_folder, excludes=excludes) + shutil.copytree(os.path.join(self.source_folder, "usr", "share", "licenses"), os.path.join(self.package_folder, "licenses")) def package_info(self): @@ -180,7 +181,7 @@ def package_info(self): self.cpp_info.includedirs = [] self.cpp_info.resdirs = [] - msys_root = self._msys_dir + msys_root = os.path.join(self.package_folder, self._msys_dir) msys_bin = os.path.join(msys_root, "usr", "bin") self.cpp_info.bindirs.append(msys_bin) diff --git a/recipes/msys2/all/test_package/conanfile.py b/recipes/msys2/all/test_package/conanfile.py index 93ee00629e591..f38adaaee318d 100644 --- a/recipes/msys2/all/test_package/conanfile.py +++ b/recipes/msys2/all/test_package/conanfile.py @@ -30,6 +30,6 @@ def test(self): self.run('bash.exe -c ^"! test -f /usr/bin/link^"') output = StringIO() - self.run('bash.exe -c "echo $PKG_CONFIG_PATH"', output=output) + self.run('bash.exe -c "echo $PKG_CONFIG_PATH"', output) print(output.getvalue()) assert self._secret_value in output.getvalue() From cb4c332f1bb8ca08c82f534f336653785dc173de Mon Sep 17 00:00:00 2001 From: System-Arch <33330183+System-Arch@users.noreply.github.com> Date: Sun, 11 Dec 2022 16:05:33 -0500 Subject: [PATCH 2/7] Remove C++ settings in configure() method --- recipes/msys2/all/conanfile.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/recipes/msys2/all/conanfile.py b/recipes/msys2/all/conanfile.py index c936f20112634..4c9311278c671 100644 --- a/recipes/msys2/all/conanfile.py +++ b/recipes/msys2/all/conanfile.py @@ -73,6 +73,10 @@ def validate(self): if self.info.settings.arch != "x86_64": raise ConanInvalidConfiguration("Only Windows x64 supported") + def configure(self): + self.settings.rm_safe("compiler.libcxx") + self.settings.rm_safe("compiler.cppstd") + def layout(self): basic_layout(self, src_folder="src") From 66de1e801d0d54606d4b8abd581012db0cc6d3e0 Mon Sep 17 00:00:00 2001 From: System-Arch <33330183+System-Arch@users.noreply.github.com> Date: Sun, 11 Dec 2022 18:50:01 -0500 Subject: [PATCH 3/7] Revamped packaging per #KB-H013: "DEFAULT PACKAGE LAYOUT" --- recipes/msys2/all/conanfile.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/recipes/msys2/all/conanfile.py b/recipes/msys2/all/conanfile.py index 4c9311278c671..6a615c77948b2 100644 --- a/recipes/msys2/all/conanfile.py +++ b/recipes/msys2/all/conanfile.py @@ -54,11 +54,13 @@ class MSYS2Conan(ConanFile): "exclude_files": ["ANY"], "packages": ["ANY"], "additional_packages": [None, "ANY"], + "no_kill": [True, False] } default_options = { "exclude_files": "*/link.exe", "packages": "base-devel,binutils,gcc", "additional_packages": None, + "no_kill": False, } short_paths = True @@ -82,10 +84,10 @@ def layout(self): def source(self): get(self, **self.conan_data["sources"][self.version], - destination=self.source_folder, strip_root=True) + destination=self.source_folder, strip_root=False) # Preserve tarball root dir (msys64/) def _update_pacman(self): - with chdir(self, os.path.join(self.source_folder, "usr", "bin")): + with chdir(self, os.path.join(self._msys_dir, "usr", "bin")): try: self._kill_pacman() @@ -102,6 +104,8 @@ def _update_pacman(self): # https://github.com/msys2/MSYS2-packages/issues/1966 def _kill_pacman(self): + if self.options.no_kill: + return if (self.settings.os == "Windows"): taskkill_exe = os.path.join(os.environ.get('SystemRoot'), 'system32', 'taskkill.exe') @@ -110,7 +114,7 @@ def _kill_pacman(self): out = subprocess.PIPE err = subprocess.STDOUT else: - out = open(os.devnull, 'w') + out = open(os.devnull, 'w', encoding='UTF-8') err = subprocess.PIPE if os.path.exists(taskkill_exe): @@ -126,11 +130,12 @@ def _kill_pacman(self): proc.wait() except OSError as e: if e.errno == errno.ENOENT: - raise ConanException("Cannot kill pacman") + raise ConanException("Cannot kill pacman") from e @property def _msys_dir(self): - return "msys64" + subdir = "msys64" # top-level directoy in tarball + return os.path.join(self.source_folder, subdir) def build(self): with lock(): @@ -145,7 +150,7 @@ def _do_build(self): self._update_pacman() - with chdir(self, os.path.join(self.source_folder, "usr", "bin")): + with chdir(self, os.path.join(self._msys_dir, "usr", "bin")): for package in packages: self.run(f'bash -l -c "pacman -S {package} --noconfirm"') for package in ['pkgconf']: @@ -155,15 +160,15 @@ def _do_build(self): # create /tmp dir in order to avoid # bash.exe: warning: could not find /tmp, please create! - tmp_dir = os.path.join(self.source_folder, 'tmp') + tmp_dir = os.path.join(self._msys_dir, 'tmp') if not os.path.isdir(tmp_dir): os.makedirs(tmp_dir) tmp_name = os.path.join(tmp_dir, 'dummy') - with open(tmp_name, 'a'): + with open(tmp_name, 'a', encoding='UTF-8'): os.utime(tmp_name, None) # Prepend the PKG_CONFIG_PATH environment variable with an eventual PKG_CONFIG_PATH environment variable - replace_in_file(self, os.path.join(self.source_folder, "etc", "profile"), + replace_in_file(self, os.path.join(self._msys_dir, "etc", "profile"), 'PKG_CONFIG_PATH="', 'PKG_CONFIG_PATH="$PKG_CONFIG_PATH:') def package(self): @@ -176,8 +181,9 @@ def package(self): fullname = os.path.join(root, filename) if fnmatch.fnmatch(fullname, exclude): os.unlink(fullname) - copy(self, "*", dst=os.path.join(self.package_folder, self._msys_dir), src=self.source_folder, excludes=excludes) - shutil.copytree(os.path.join(self.source_folder, "usr", "share", "licenses"), + # See https://github.com/conan-io/conan-center-index/blob/master/docs/error_knowledge_base.md#kb-h013-default-package-layout + copy(self, "*", dst=os.path.join(self.package_folder, "bin", "msys64"), src=self._msys_dir, excludes=excludes) + shutil.copytree(os.path.join(self._msys_dir, "usr", "share", "licenses"), os.path.join(self.package_folder, "licenses")) def package_info(self): @@ -185,7 +191,7 @@ def package_info(self): self.cpp_info.includedirs = [] self.cpp_info.resdirs = [] - msys_root = os.path.join(self.package_folder, self._msys_dir) + msys_root = os.path.join(self.package_folder, "bin", "msys64") msys_bin = os.path.join(msys_root, "usr", "bin") self.cpp_info.bindirs.append(msys_bin) From 656d687cedc297869b79b465ac618ebde8411db8 Mon Sep 17 00:00:00 2001 From: System-Arch <33330183+System-Arch@users.noreply.github.com> Date: Thu, 22 Dec 2022 18:54:03 -0500 Subject: [PATCH 4/7] Drop Python 2 support --- recipes/msys2/all/conanfile.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/recipes/msys2/all/conanfile.py b/recipes/msys2/all/conanfile.py index b2a4401bf9c66..27d8a46ab4cf2 100644 --- a/recipes/msys2/all/conanfile.py +++ b/recipes/msys2/all/conanfile.py @@ -7,16 +7,9 @@ import shutil import subprocess import errno +import ctypes -try: - import ctypes -except ImportError: - pass -except ValueError: - pass - -required_conan_version = ">=1.47.0" - +required_conan_version = ">=1.49.0" class lock: def __init__(self): @@ -39,7 +32,6 @@ def close(self): __del__ = close - class MSYS2Conan(ConanFile): name = "msys2" description = "MSYS2 is a software distro and building platform for Windows" From 95c39807519f094ce1ec9a67a35d4dbcc5c215b0 Mon Sep 17 00:00:00 2001 From: System-Arch <33330183+System-Arch@users.noreply.github.com> Date: Fri, 13 Jan 2023 00:13:06 -0500 Subject: [PATCH 5/7] Bumped required_conan_version to clear "failed" label --- recipes/msys2/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/msys2/all/conanfile.py b/recipes/msys2/all/conanfile.py index 27d8a46ab4cf2..2b2c35b0746fd 100644 --- a/recipes/msys2/all/conanfile.py +++ b/recipes/msys2/all/conanfile.py @@ -9,7 +9,7 @@ import errno import ctypes -required_conan_version = ">=1.49.0" +required_conan_version = ">=1.55.0" class lock: def __init__(self): From ecd8e49a0ae224893157bb4473f7d50f04ecadea Mon Sep 17 00:00:00 2001 From: System-Arch <33330183+System-Arch@users.noreply.github.com> Date: Fri, 20 Jan 2023 19:08:30 -0500 Subject: [PATCH 6/7] Added objdump to system_libs --- recipes/msys2/all/conanfile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/recipes/msys2/all/conanfile.py b/recipes/msys2/all/conanfile.py index 2b2c35b0746fd..f4d847b4f9782 100644 --- a/recipes/msys2/all/conanfile.py +++ b/recipes/msys2/all/conanfile.py @@ -178,6 +178,7 @@ def package_info(self): self.cpp_info.libdirs = [] self.cpp_info.includedirs = [] self.cpp_info.resdirs = [] + self.cpp_info.system_libs = ["objdump"] msys_root = os.path.join(self.package_folder, "bin", "msys64") msys_bin = os.path.join(msys_root, "usr", "bin") From 5640aa43df9a0d53163b6940bccb6c6aa0d3d703 Mon Sep 17 00:00:00 2001 From: System-Arch <33330183+System-Arch@users.noreply.github.com> Date: Sun, 22 Jan 2023 18:01:07 -0500 Subject: [PATCH 7/7] @Spacelm says to ignore objdump hooks issue Co-authored-by: SpaceIm <30052553+SpaceIm@users.noreply.github.com> --- recipes/msys2/all/conanfile.py | 1 - 1 file changed, 1 deletion(-) diff --git a/recipes/msys2/all/conanfile.py b/recipes/msys2/all/conanfile.py index f4d847b4f9782..2b2c35b0746fd 100644 --- a/recipes/msys2/all/conanfile.py +++ b/recipes/msys2/all/conanfile.py @@ -178,7 +178,6 @@ def package_info(self): self.cpp_info.libdirs = [] self.cpp_info.includedirs = [] self.cpp_info.resdirs = [] - self.cpp_info.system_libs = ["objdump"] msys_root = os.path.join(self.package_folder, "bin", "msys64") msys_bin = os.path.join(msys_root, "usr", "bin")