diff options
author | John W. Parent <45471568+johnwparent@users.noreply.github.com> | 2024-08-09 12:13:57 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-09 10:13:57 -0600 |
commit | 92e42bbed96f0faadde8808b0be8f878c14c38da (patch) | |
tree | 14cca61c4b22bed64aa022b92e20c5349530d49f | |
parent | 899ac7888761746b735089473873a68c45c7cfb4 (diff) | |
download | spack-92e42bbed96f0faadde8808b0be8f878c14c38da.tar.gz spack-92e42bbed96f0faadde8808b0be8f878c14c38da.tar.bz2 spack-92e42bbed96f0faadde8808b0be8f878c14c38da.tar.xz spack-92e42bbed96f0faadde8808b0be8f878c14c38da.zip |
Windows: Port Libuv (#45413)
* On Windows it is built with CMake, however CMake is built against
libuv, so libuv must depend on cmake+ownlibs to short circuit the
circular dependency
* libuv currently fetches the -dist source distribution of libuv for
certain versions because those versions contain a pre-generated
./configure script. However those distributions have all CMake
files removed, so they cannot be used to build on Windows.
Because the source distributions are different, this means the
checksums are different, and necessitates an additional version
declaration for each version we want to support with CMake.
-rw-r--r-- | var/spack/repos/builtin/packages/gloo/package.py | 1 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libuv/package.py | 90 |
2 files changed, 77 insertions, 14 deletions
diff --git a/var/spack/repos/builtin/packages/gloo/package.py b/var/spack/repos/builtin/packages/gloo/package.py index 5a4d4f5110..4d431020a8 100644 --- a/var/spack/repos/builtin/packages/gloo/package.py +++ b/var/spack/repos/builtin/packages/gloo/package.py @@ -52,6 +52,7 @@ class Gloo(CMakePackage, CudaPackage): depends_on("pkgconfig", type="build") depends_on("libuv@1.26:", when="+libuv") depends_on("cmake@2.8.12:", type="build") + depends_on("libuv", when="platform=windows") def cmake_args(self): return [ diff --git a/var/spack/repos/builtin/packages/libuv/package.py b/var/spack/repos/builtin/packages/libuv/package.py index f6a5947957..5b578d419e 100644 --- a/var/spack/repos/builtin/packages/libuv/package.py +++ b/var/spack/repos/builtin/packages/libuv/package.py @@ -2,25 +2,63 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import sys + +import spack.build_systems from spack.package import * -class Libuv(AutotoolsPackage): +class Libuv(CMakePackage, AutotoolsPackage): """Multi-platform library with a focus on asynchronous IO""" homepage = "https://libuv.org" - url = "https://dist.libuv.org/dist/v1.44.1/libuv-v1.44.1-dist.tar.gz" + url = "https://dist.libuv.org/dist/v1.44.1/libuv-v1.44.1.tar.gz" list_url = "https://dist.libuv.org/dist" list_depth = 1 license("MIT") - version("1.48.0", sha256="c593139feb9061699fdd2f7fde47bb6c1ca77761ae9ec04f052083f1ef46c13b") - version("1.46.0", sha256="94f101111ef3209340d7f09c2aa150ddb4feabd2f9d87d47d9f5bded835b8094") - version("1.45.0", sha256="3793d8c0d6fa587721d010d0555b7e82443fd4e8b3c91e529eb6607592f52b87") - version("1.44.2", sha256="8ff28f6ac0d6d2a31d2eeca36aff3d7806706c7d3f5971f5ee013ddb0bdd2e9e") - version("1.44.1", sha256="b7293cefb470e17774dcf5d62c4c969636172726155b55ceef5092b7554863cc") - version("1.44.0", sha256="6c52494401cfe8d08fb4ec245882f0bd4b1572b5a8e79d6c418b855422a1a27d") + if sys.platform == "win32": + version( + "1.48.0", sha256="7f1db8ac368d89d1baf163bac1ea5fe5120697a73910c8ae6b2fffb3551d59fb" + ) + version( + "1.47.0", sha256="20c37a4ca77a2107879473c6c8fa0dc1350e80045df98bfbe78f7cd6d7dd2965" + ) + version( + "1.46.0", sha256="111f83958b9fdc65f1489195d25f342b9f7a3e683140c60e62c00fbaccddddce" + ) + version( + "1.45.0", sha256="f5b07f65a1e8166e47983a7ed1f42fae0bee08f7458142170c37332fc676a748" + ) + version( + "1.44.2", sha256="ccfcdc968c55673c6526d8270a9c8655a806ea92468afcbcabc2b16040f03cb4" + ) + version( + "1.44.1", sha256="9d37b63430fe3b92a9386b949bebd8f0b4784a39a16964c82c9566247a76f64a" + ) + version( + "1.44.0", sha256="d969fc47b8e39ec909d3f8cfa6a6e616e7c370637068ce2d95fdfcbb7f8467f5" + ) + else: + version( + "1.48.0", sha256="c593139feb9061699fdd2f7fde47bb6c1ca77761ae9ec04f052083f1ef46c13b" + ) + version( + "1.46.0", sha256="94f101111ef3209340d7f09c2aa150ddb4feabd2f9d87d47d9f5bded835b8094" + ) + version( + "1.45.0", sha256="3793d8c0d6fa587721d010d0555b7e82443fd4e8b3c91e529eb6607592f52b87" + ) + version( + "1.44.2", sha256="8ff28f6ac0d6d2a31d2eeca36aff3d7806706c7d3f5971f5ee013ddb0bdd2e9e" + ) + version( + "1.44.1", sha256="b7293cefb470e17774dcf5d62c4c969636172726155b55ceef5092b7554863cc" + ) + version( + "1.44.0", sha256="6c52494401cfe8d08fb4ec245882f0bd4b1572b5a8e79d6c418b855422a1a27d" + ) version("1.43.0", sha256="90d72bb7ae18de2519d0cac70eb89c319351146b90cd3f91303a492707e693a4") version("1.42.0", sha256="43129625155a8aed796ebe90b8d4c990a73985ec717de2b2d5d3a23cfe4deb72") version("1.41.1", sha256="65db0c7f2438bc8cd48865de282bf6670027f3557d6e3cb62fb65b2e350a687d") @@ -35,17 +73,33 @@ class Libuv(AutotoolsPackage): depends_on("c", type="build") # generated def url_for_version(self, version): - if self.spec.satisfies("@:1.43"): + if self.spec.satisfies("@:1.43") or self.spec.satisfies("build_system=cmake"): + # This version includes CMake files unlike the '-dist' source distribution below url = "https://dist.libuv.org/dist/v{0}/libuv-v{0}.tar.gz" else: # From 1.44 on, the `-dist` download includes a configure script url = "https://dist.libuv.org/dist/v{0}/libuv-v{0}-dist.tar.gz" return url.format(version, version) - depends_on("automake", type="build", when="@:1.43.0") - depends_on("autoconf", type="build", when="@:1.43.0") - depends_on("libtool", type="build", when="@:1.43.0") - depends_on("m4", type="build", when="@:1.43.0") + # Windows needs a CMake build, but the cmake-enabled sources do not have a + # pre-generated configure script to enable the autotools build, so: (a) + # pull different sources if you are on Windows and (b) make sure cmake + # build is not chosen on Linux + # (because Linux does not download the cmake-enabled source). + # new libuv versions should only use CMake to prevent the scenario + # described above + build_system(conditional("cmake", when="platform=windows"), "autotools", default="autotools") + + with when("build_system=autotools"): + depends_on("automake", type="build", when="@:1.43.0") + depends_on("autoconf", type="build", when="@:1.43.0") + depends_on("libtool", type="build", when="@:1.43.0") + depends_on("m4", type="build", when="@:1.43.0") + + with when("build_system=cmake"): + # explicitly require ownlibs to indicate we're short + # circuiting the cmake<->libuv cyclic dependency here + depends_on("cmake+ownlibs") conflicts( "%gcc@:4.8", @@ -63,9 +117,17 @@ class Libuv(AutotoolsPackage): msg="libuv does not compile with GCC on macOS yet, use clang. " "See: https://github.com/libuv/libuv/issues/2805", ) + conflicts( + "platform=windows", + when="@:1.20", + msg="Build system for Windows in versions older than 1.21 is" + "broken for versions of MSVC supported by Spack", + ) + +class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder): @when("@:1.43") - def autoreconf(self, spec, prefix): + def autoreconf(self, pkg, spec, prefix): # This is needed because autogen.sh generates on-the-fly # an m4 macro needed during configuration Executable("./autogen.sh")() |