From cd032aa797d95232d330c5478303cde0c01cf6cc Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Sun, 14 Apr 2024 18:53:16 +0300 Subject: [PATCH 1/6] coin-osi: add v0.108.10, use coin-buildtools and apply autoreconf --- recipes/coin-osi/all/conandata.yml | 5 ++- recipes/coin-osi/all/conanfile.py | 67 +++++++++++++++++++++--------- recipes/coin-osi/config.yml | 2 + 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/recipes/coin-osi/all/conandata.yml b/recipes/coin-osi/all/conandata.yml index 0838e4d392f2d..1a7a5096eabfd 100644 --- a/recipes/coin-osi/all/conandata.yml +++ b/recipes/coin-osi/all/conandata.yml @@ -1,4 +1,7 @@ sources: + "0.108.10": + url: "https://github.com/coin-or/Osi/archive/releases/0.108.10.tar.gz" + sha256: "614c2b329caf57c00326412266299fdfd93c5691492034fbb46990b5e71cc5a7" "0.108.7": url: "https://github.com/coin-or/Osi/archive/releases/0.108.7.tar.gz" sha256: "f1bc53a498585f508d3f8d74792440a30a83c8bc934d0c8ecf8cd8bc0e486228" @@ -7,13 +10,11 @@ sources: sha256: "984a5886825e2da9bf44d8a665f4b92812f0700e451c12baf9883eaa2315fad5" patches: "0.108.7": - - patch_file: "patches/0.108.6-0001-no-pkg-config-check.patch" - patch_file: "patches/0.108.6-0002-cpp17-compat.patch" patch_description: "C++17 compatibility" patch_type: "portability" patch_source: "https://github.com/coin-or/Osi/pull/177" "0.108.6": - - patch_file: "patches/0.108.6-0001-no-pkg-config-check.patch" - patch_file: "patches/0.108.6-0002-cpp17-compat.patch" patch_description: "C++17 compatibility" patch_type: "portability" diff --git a/recipes/coin-osi/all/conanfile.py b/recipes/coin-osi/all/conanfile.py index 25195bd85f4c6..7e3b1e9ca65ae 100644 --- a/recipes/coin-osi/all/conanfile.py +++ b/recipes/coin-osi/all/conanfile.py @@ -1,13 +1,13 @@ +import os +import shutil + from conan import ConanFile -from conan.errors import ConanInvalidConfiguration from conan.tools.apple import fix_apple_shared_install_name -from conan.tools.build import cross_building from conan.tools.env import VirtualBuildEnv from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rename, rm, rmdir from conan.tools.gnu import Autotools, AutotoolsToolchain, PkgConfigDeps from conan.tools.layout import basic_layout from conan.tools.microsoft import check_min_vs, is_msvc, msvc_runtime_flag -import os required_conan_version = ">=1.57.0" @@ -24,10 +24,12 @@ class CoinOsiConan(ConanFile): options = { "shared": [True, False], "fPIC": [True, False], + "with_glpk": [True, False], } default_options = { "shared": False, "fPIC": True, + "with_glpk": True, } @property @@ -49,19 +51,20 @@ def layout(self): basic_layout(self, src_folder="src") def requirements(self): - self.requires("coin-utils/2.11.9") - - def validate(self): - if self.settings.os == "Windows" and self.options.shared: - raise ConanInvalidConfiguration("coin-osi does not support shared builds on Windows") - # FIXME: This issue likely comes from very old autotools versions used to produce configure. - if hasattr(self, "settings_build") and cross_building(self) and self.options.shared: - raise ConanInvalidConfiguration("coin-osi shared not supported yet when cross-building") + self.requires("coin-utils/2.11.11") + self.requires("openblas/0.3.26") + if self.options.with_glpk: + self.requires("glpk/4.48") + # TODO: add support for: Cplex, Mosek, Xpress, Gurobi + # https://github.com/coin-or/Osi/blob/stable/0.108/Osi/configure.ac#L65-L77 + # soplex support requires v4.0, which is not available on CCI and is distributed under ZIB Academic License + # https://github.com/coin-or-tools/ThirdParty-SoPlex/blob/master/INSTALL.SoPlex def build_requirements(self): + self.tool_requires("coin-buildtools/0.8.11") self.tool_requires("gnu-config/cci.20210814") if not self.conf.get("tools.gnu:pkg_config", check_type=str): - self.tool_requires("pkgconf/2.0.3") + self.tool_requires("pkgconf/2.1.0") if self._settings_build.os == "Windows": self.win_bash = True if not self.conf.get("tools.microsoft.bash:path", check_type=str): @@ -74,10 +77,28 @@ def generate(self): env = VirtualBuildEnv(self) env.generate() + deps = PkgConfigDeps(self) + deps.generate() + + def _add_pkg_config_alias(src_name, dst_name): + shutil.copy(os.path.join(self.generators_folder, f"{src_name}.pc"), + os.path.join(self.generators_folder, f"{dst_name}.pc")) + + _add_pkg_config_alias("openblas", "coinblas") + _add_pkg_config_alias("openblas", "coinlapack") + if self.options.with_glpk: + _add_pkg_config_alias("glpk", "coinglpk") + tc = AutotoolsToolchain(self) tc.configure_args.extend([ - "--without-blas", - "--without-lapack", + # the coin*.pc pkg-config files are only used when set to BUILD + "--with-blas=BUILD", + "--with-lapack=BUILD", + "--with-glpk=BUILD" if self.options.with_glpk else "--without-glpk", + "--with-soplex=no", + # These are only used for sample datasets + "--without-netlib", + "--without-sample", ]) if is_msvc(self): tc.extra_cxxflags.append("-EHsc") @@ -98,18 +119,19 @@ def generate(self): env.define("PKG_CONFIG_PATH", self.generators_folder) tc.generate(env) - deps = PkgConfigDeps(self) - deps.generate() - def build(self): apply_conandata_patches(self) + copy(self, "*", os.path.join(self.dependencies.build["coin-buildtools"].package_folder, "res"), + os.path.join(self.source_folder, "BuildTools")) + copy(self, "*", os.path.join(self.dependencies.build["coin-buildtools"].package_folder, "res"), + os.path.join(self.source_folder, "Osi", "BuildTools")) for gnu_config in [ self.conf.get("user.gnu-config:config_guess", check_type=str), self.conf.get("user.gnu-config:config_sub", check_type=str), ]: - if gnu_config: - copy(self, os.path.basename(gnu_config), src=os.path.dirname(gnu_config), dst=self.source_folder) + copy(self, os.path.basename(gnu_config), src=os.path.dirname(gnu_config), dst=self.source_folder) autotools = Autotools(self) + autotools.autoreconf() autotools.configure() autotools.make() @@ -130,8 +152,13 @@ def package_info(self): self.cpp_info.components["libosi"].set_property("pkg_config_name", "osi") self.cpp_info.components["libosi"].libs = ["Osi"] self.cpp_info.components["libosi"].includedirs = [os.path.join("include", "coin")] - self.cpp_info.components["libosi"].requires = ["coin-utils::coin-utils"] + self.cpp_info.components["libosi"].requires = ["coin-utils::coin-utils", "openblas::openblas"] self.cpp_info.components["osi-unittests"].set_property("pkg_config_name", "osi-unittests") self.cpp_info.components["osi-unittests"].libs = ["OsiCommonTests"] self.cpp_info.components["osi-unittests"].requires = ["libosi"] + + if self.options.with_glpk: + self.cpp_info.components["osi-glpk"].set_property("pkg_config_name", "osi-glpk") + self.cpp_info.components["osi-glpk"].libs = ["OsiGlpk"] + self.cpp_info.components["osi-glpk"].requires = ["libosi", "glpk::glpk"] diff --git a/recipes/coin-osi/config.yml b/recipes/coin-osi/config.yml index aca1ba23ffa90..0462859777bde 100644 --- a/recipes/coin-osi/config.yml +++ b/recipes/coin-osi/config.yml @@ -1,4 +1,6 @@ versions: + "0.108.10": + folder: "all" "0.108.7": folder: "all" "0.108.6": From 410eece94987f2b725f128055fd1003584fffb16 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Mon, 29 Jul 2024 12:59:42 +0300 Subject: [PATCH 2/6] Use pkgconf/[>=2.2 <3] --- recipes/coin-osi/all/conanfile.py | 2 +- recipes/coin-osi/all/test_package/conanfile.py | 2 +- recipes/coin-osi/all/test_v1_package/conanfile.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/recipes/coin-osi/all/conanfile.py b/recipes/coin-osi/all/conanfile.py index 7e3b1e9ca65ae..c7ab4285968dc 100644 --- a/recipes/coin-osi/all/conanfile.py +++ b/recipes/coin-osi/all/conanfile.py @@ -64,7 +64,7 @@ def build_requirements(self): self.tool_requires("coin-buildtools/0.8.11") self.tool_requires("gnu-config/cci.20210814") if not self.conf.get("tools.gnu:pkg_config", check_type=str): - self.tool_requires("pkgconf/2.1.0") + self.tool_requires("pkgconf/[>=2.2 <3]") if self._settings_build.os == "Windows": self.win_bash = True if not self.conf.get("tools.microsoft.bash:path", check_type=str): diff --git a/recipes/coin-osi/all/test_package/conanfile.py b/recipes/coin-osi/all/test_package/conanfile.py index 7ab87ca07735c..2d330f0452348 100644 --- a/recipes/coin-osi/all/test_package/conanfile.py +++ b/recipes/coin-osi/all/test_package/conanfile.py @@ -17,7 +17,7 @@ def requirements(self): def build_requirements(self): if not self.conf.get("tools.gnu:pkg_config", check_type=str): - self.tool_requires("pkgconf/2.0.3") + self.tool_requires("pkgconf/[>=2.2 <3]") def build(self): cmake = CMake(self) diff --git a/recipes/coin-osi/all/test_v1_package/conanfile.py b/recipes/coin-osi/all/test_v1_package/conanfile.py index b3607270e232e..f72755da5940c 100644 --- a/recipes/coin-osi/all/test_v1_package/conanfile.py +++ b/recipes/coin-osi/all/test_v1_package/conanfile.py @@ -7,7 +7,7 @@ class TestPackageConan(ConanFile): generators = "cmake", "pkg_config" def build_requirements(self): - self.build_requires("pkgconf/2.0.3") + self.build_requires("pkgconf/[>=2.2 <3]") def build(self): cmake = CMake(self) From 5ccd52ec436d5044d8b961f55dc40bc950fba339 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Mon, 14 Oct 2024 18:59:05 +0300 Subject: [PATCH 3/6] coin-osi: --disable-dependency-linking --- recipes/coin-osi/all/conanfile.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/recipes/coin-osi/all/conanfile.py b/recipes/coin-osi/all/conanfile.py index c7ab4285968dc..ecfb4230796b2 100644 --- a/recipes/coin-osi/all/conanfile.py +++ b/recipes/coin-osi/all/conanfile.py @@ -99,6 +99,8 @@ def _add_pkg_config_alias(src_name, dst_name): # These are only used for sample datasets "--without-netlib", "--without-sample", + "--disable-dependency-linking", + "F77=unavailable", ]) if is_msvc(self): tc.extra_cxxflags.append("-EHsc") From 3d740f7ba2d15712238ab282eff7b42c5c740f25 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Mon, 11 Nov 2024 18:37:36 +0200 Subject: [PATCH 4/6] Use openblas/0.3.28 for cross-compilation support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Version 0.3.27 fails to cross-compile with lapack-netlib/SRC/spstrf.c:830:43: error: passing argument 1 of ‘dmaxloc_’ from incompatible pointer type [-Wincompatible-pointer-types] --- recipes/coin-osi/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/coin-osi/all/conanfile.py b/recipes/coin-osi/all/conanfile.py index ecfb4230796b2..34b90d430deb2 100644 --- a/recipes/coin-osi/all/conanfile.py +++ b/recipes/coin-osi/all/conanfile.py @@ -52,7 +52,7 @@ def layout(self): def requirements(self): self.requires("coin-utils/2.11.11") - self.requires("openblas/0.3.26") + self.requires("openblas/0.3.28") if self.options.with_glpk: self.requires("glpk/4.48") # TODO: add support for: Cplex, Mosek, Xpress, Gurobi From 10d4de209f645f7b5b1ae029393faae630cef185 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 13 Nov 2024 14:10:50 +0200 Subject: [PATCH 5/6] coin-osi: drop test_v1_package --- .../all/test_v1_package/CMakeLists.txt | 8 -------- .../coin-osi/all/test_v1_package/conanfile.py | 20 ------------------- 2 files changed, 28 deletions(-) delete mode 100644 recipes/coin-osi/all/test_v1_package/CMakeLists.txt delete mode 100644 recipes/coin-osi/all/test_v1_package/conanfile.py diff --git a/recipes/coin-osi/all/test_v1_package/CMakeLists.txt b/recipes/coin-osi/all/test_v1_package/CMakeLists.txt deleted file mode 100644 index 0d20897301b68..0000000000000 --- a/recipes/coin-osi/all/test_v1_package/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -cmake_minimum_required(VERSION 3.1) -project(test_package) - -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup(TARGETS) - -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package - ${CMAKE_CURRENT_BINARY_DIR}/test_package) diff --git a/recipes/coin-osi/all/test_v1_package/conanfile.py b/recipes/coin-osi/all/test_v1_package/conanfile.py deleted file mode 100644 index f72755da5940c..0000000000000 --- a/recipes/coin-osi/all/test_v1_package/conanfile.py +++ /dev/null @@ -1,20 +0,0 @@ -from conans import ConanFile, CMake, tools -import os - - -class TestPackageConan(ConanFile): - settings = "os", "arch", "compiler", "build_type" - generators = "cmake", "pkg_config" - - def build_requirements(self): - self.build_requires("pkgconf/[>=2.2 <3]") - - def build(self): - cmake = CMake(self) - cmake.configure() - cmake.build() - - def test(self): - if not tools.cross_building(self): - bin_path = os.path.join("bin", "test_package") - self.run(bin_path, run_environment=True) From d20a1066ce6805d373e9dadaa533ed49be161ee4 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Mon, 10 Feb 2025 17:18:14 +0200 Subject: [PATCH 6/6] coin-osi: drop Conan v1 support --- recipes/coin-osi/all/conanfile.py | 30 ++++--------------- .../coin-osi/all/test_package/CMakeLists.txt | 2 +- .../coin-osi/all/test_package/conanfile.py | 5 ++-- 3 files changed, 9 insertions(+), 28 deletions(-) diff --git a/recipes/coin-osi/all/conanfile.py b/recipes/coin-osi/all/conanfile.py index 34b90d430deb2..c62ea6509961c 100644 --- a/recipes/coin-osi/all/conanfile.py +++ b/recipes/coin-osi/all/conanfile.py @@ -3,13 +3,12 @@ from conan import ConanFile from conan.tools.apple import fix_apple_shared_install_name -from conan.tools.env import VirtualBuildEnv from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rename, rm, rmdir from conan.tools.gnu import Autotools, AutotoolsToolchain, PkgConfigDeps from conan.tools.layout import basic_layout -from conan.tools.microsoft import check_min_vs, is_msvc, msvc_runtime_flag +from conan.tools.microsoft import is_msvc, msvc_runtime_flag -required_conan_version = ">=1.57.0" +required_conan_version = ">=2.1.0" class CoinOsiConan(ConanFile): @@ -31,22 +30,11 @@ class CoinOsiConan(ConanFile): "fPIC": True, "with_glpk": True, } - - @property - def _settings_build(self): - return getattr(self, "settings_build", self.settings) + implements = ["auto_shared_fpic"] def export_sources(self): export_conandata_patches(self) - def config_options(self): - if self.settings.os == "Windows": - del self.options.fPIC - - def configure(self): - if self.options.shared: - self.options.rm_safe("fPIC") - def layout(self): basic_layout(self, src_folder="src") @@ -65,18 +53,16 @@ def build_requirements(self): self.tool_requires("gnu-config/cci.20210814") if not self.conf.get("tools.gnu:pkg_config", check_type=str): self.tool_requires("pkgconf/[>=2.2 <3]") - if self._settings_build.os == "Windows": + if self.settings_build.os == "Windows": self.win_bash = True if not self.conf.get("tools.microsoft.bash:path", check_type=str): self.tool_requires("msys2/cci.latest") def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) + apply_conandata_patches(self) def generate(self): - env = VirtualBuildEnv(self) - env.generate() - deps = PkgConfigDeps(self) deps.generate() @@ -105,16 +91,13 @@ def _add_pkg_config_alias(src_name, dst_name): if is_msvc(self): tc.extra_cxxflags.append("-EHsc") tc.configure_args.append(f"--enable-msvc={msvc_runtime_flag(self)}") - if check_min_vs(self, "180", raise_invalid=False): - tc.extra_cflags.append("-FS") - tc.extra_cxxflags.append("-FS") env = tc.environment() if is_msvc(self): env.define("CC", "cl -nologo") env.define("CXX", "cl -nologo") env.define("LD", "link -nologo") env.define("AR", "lib -nologo") - if self._settings_build.os == "Windows": + if self.settings_build.os == "Windows": # TODO: Something to fix in conan client or pkgconf recipe? # This is a weird workaround when build machine is Windows. Here we have to inject regular # Windows path to pc files folder instead of unix path flavor injected by AutotoolsToolchain... @@ -122,7 +105,6 @@ def _add_pkg_config_alias(src_name, dst_name): tc.generate(env) def build(self): - apply_conandata_patches(self) copy(self, "*", os.path.join(self.dependencies.build["coin-buildtools"].package_folder, "res"), os.path.join(self.source_folder, "BuildTools")) copy(self, "*", os.path.join(self.dependencies.build["coin-buildtools"].package_folder, "res"), diff --git a/recipes/coin-osi/all/test_package/CMakeLists.txt b/recipes/coin-osi/all/test_package/CMakeLists.txt index d49eef53308a3..8fd1fe7c60738 100644 --- a/recipes/coin-osi/all/test_package/CMakeLists.txt +++ b/recipes/coin-osi/all/test_package/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.15) project(test_package LANGUAGES CXX) find_package(PkgConfig REQUIRED) diff --git a/recipes/coin-osi/all/test_package/conanfile.py b/recipes/coin-osi/all/test_package/conanfile.py index 2d330f0452348..2f531975c08ae 100644 --- a/recipes/coin-osi/all/test_package/conanfile.py +++ b/recipes/coin-osi/all/test_package/conanfile.py @@ -6,8 +6,7 @@ class TestPackageConan(ConanFile): settings = "os", "arch", "compiler", "build_type" - generators = "CMakeToolchain", "PkgConfigDeps", "VirtualBuildEnv", "VirtualRunEnv" - test_type = "explicit" + generators = "CMakeToolchain", "PkgConfigDeps" def layout(self): cmake_layout(self) @@ -26,5 +25,5 @@ def build(self): def test(self): if can_run(self): - bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") + bin_path = os.path.join(self.cpp.build.bindir, "test_package") self.run(bin_path, env="conanrun")