diff --git a/recipes/glpk/all/conandata.yml b/recipes/glpk/all/conandata.yml index a355fe0344e5f..20b753a8ea6a4 100644 --- a/recipes/glpk/all/conandata.yml +++ b/recipes/glpk/all/conandata.yml @@ -1,4 +1,16 @@ sources: "5.0": - url: "https://ftp.gnu.org/gnu/glpk/glpk-5.0.tar.gz" + url: + - "https://ftpmirror.gnu.org/glpk/glpk-5.0.tar.gz" + - "https://ftp.gnu.org/gnu/glpk/glpk-5.0.tar.gz" sha256: "4a1013eebb50f728fc601bdd833b0b2870333c3b3e5a816eeba921d95bec6f15" + "4.65": + url: + - "https://ftpmirror.gnu.org/glpk/glpk-4.65.tar.gz" + - "https://ftp.gnu.org/gnu/glpk/glpk-4.65.tar.gz" + sha256: "4281e29b628864dfe48d393a7bedd781e5b475387c20d8b0158f329994721a10" + "4.48": + url: + - "https://ftpmirror.gnu.org/glpk/glpk-4.48.tar.gz" + - "https://ftp.gnu.org/gnu/glpk/glpk-4.48.tar.gz" + sha256: "abc2c8f895b20a91cdfcfc04367a0bc8677daf8b4ec3f3e86c5b71c79ac6adb1" diff --git a/recipes/glpk/all/conanfile.py b/recipes/glpk/all/conanfile.py index 7c7e12af60356..ac3dfcbef0e0a 100644 --- a/recipes/glpk/all/conanfile.py +++ b/recipes/glpk/all/conanfile.py @@ -1,15 +1,16 @@ -from conan import ConanFile, conan_version +import os + +from conan import ConanFile +from conan.tools import CppInfo from conan.tools.apple import fix_apple_shared_install_name from conan.tools.build import cross_building -from conan.tools.env import Environment, VirtualBuildEnv, VirtualRunEnv +from conan.tools.env import Environment, VirtualRunEnv from conan.tools.files import copy, get, rename, rm -from conan.tools.gnu import Autotools, AutotoolsToolchain +from conan.tools.gnu import Autotools, AutotoolsToolchain, AutotoolsDeps from conan.tools.layout import basic_layout from conan.tools.microsoft import is_msvc, unix_path -from conan.tools.scm import Version -import os -required_conan_version = ">=1.54.0" +required_conan_version = ">=2.1.0" class GlpkConan(ConanFile): @@ -24,16 +25,14 @@ class GlpkConan(ConanFile): options = { "shared": [True, False], "fPIC": [True, False], + "with_gmp": [True, False], } default_options = { "shared": False, "fPIC": True, + "with_gmp": True, } - @property - def _settings_build(self): - return getattr(self, "settings_build", self.settings) - def config_options(self): if self.settings.os == "Windows": del self.options.fPIC @@ -47,9 +46,13 @@ def configure(self): def layout(self): basic_layout(self, src_folder="src") + def requirements(self): + if self.options.with_gmp: + self.requires("gmp/6.3.0") + def build_requirements(self): self.tool_requires("libtool/2.4.7") - 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") @@ -60,20 +63,14 @@ def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) def generate(self): - env = VirtualBuildEnv(self) - env.generate() - if not cross_building(self): env = VirtualRunEnv(self) env.generate(scope="build") tc = AutotoolsToolchain(self) + tc.configure_args.append("--with-gmp" if self.options.with_gmp else "--without-gmp") if is_msvc(self): tc.extra_defines.append("__WOE__") - if (Version(conan_version).major < "2" and self.settings.compiler == "Visual Studio" \ - and Version(self.settings.compiler.version) >= "12") or \ - (self.settings.compiler == "msvc" and Version(self.settings.compiler.version) >= "180"): - tc.extra_cflags.append("-FS") tc.generate() if is_msvc(self): @@ -91,6 +88,23 @@ def generate(self): env.define("STRIP", ":") env.vars(self).save_script("conanbuild_msvc") + if is_msvc(self): + # Custom AutotoolsDeps for cl like compilers + # workaround for https://github.com/conan-io/conan/issues/12784 + cpp_info = CppInfo(self) + for dependency in self.dependencies.values(): + cpp_info.merge(dependency.cpp_info.aggregated_components()) + env = Environment() + env.append("CPPFLAGS", [f"-I{unix_path(self, p)}" for p in cpp_info.includedirs] + [f"-D{d}" for d in cpp_info.defines]) + env.append("_LINK_", [lib if lib.endswith(".lib") else f"{lib}.lib" for lib in cpp_info.libs]) + env.append("LDFLAGS", [f"-L{unix_path(self, p)}" for p in cpp_info.libdirs] + cpp_info.sharedlinkflags + cpp_info.exelinkflags) + env.append("CXXFLAGS", cpp_info.cxxflags) + env.append("CFLAGS", cpp_info.cflags) + env.vars(self).save_script("conanautotoolsdeps_cl_workaround") + else: + deps = AutotoolsDeps(self) + deps.generate() + def build(self): autotools = Autotools(self) autotools.autoreconf() @@ -112,5 +126,3 @@ def package_info(self): if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.system_libs.append("m") - # TODO: to remove in conan v2 - self.env_info.PATH.append(os.path.join(self.package_folder, "bin")) diff --git a/recipes/glpk/all/test_package/conanfile.py b/recipes/glpk/all/test_package/conanfile.py index 0a6bc68712d90..b3f098e55841a 100644 --- a/recipes/glpk/all/test_package/conanfile.py +++ b/recipes/glpk/all/test_package/conanfile.py @@ -6,8 +6,7 @@ class TestPackageConan(ConanFile): settings = "os", "arch", "compiler", "build_type" - generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv" - test_type = "explicit" + generators = "CMakeToolchain", "CMakeDeps" def layout(self): cmake_layout(self) @@ -22,5 +21,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") diff --git a/recipes/glpk/all/test_v1_package/CMakeLists.txt b/recipes/glpk/all/test_v1_package/CMakeLists.txt deleted file mode 100644 index b21cc49efde95..0000000000000 --- a/recipes/glpk/all/test_v1_package/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -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/glpk/all/test_v1_package/conanfile.py b/recipes/glpk/all/test_v1_package/conanfile.py deleted file mode 100644 index 38f4483872d47..0000000000000 --- a/recipes/glpk/all/test_v1_package/conanfile.py +++ /dev/null @@ -1,17 +0,0 @@ -from conans import ConanFile, CMake, tools -import os - - -class TestPackageConan(ConanFile): - settings = "os", "arch", "compiler", "build_type" - generators = "cmake", "cmake_find_package_multi" - - 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) diff --git a/recipes/glpk/config.yml b/recipes/glpk/config.yml index d27c85493de54..d7b261e3e9a2f 100644 --- a/recipes/glpk/config.yml +++ b/recipes/glpk/config.yml @@ -1,3 +1,7 @@ versions: "5.0": folder: all + "4.65": + folder: all + "4.48": + folder: all