diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/bzip2/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/bzip2/package.py | 55 |
1 files changed, 43 insertions, 12 deletions
diff --git a/var/spack/repos/builtin/packages/bzip2/package.py b/var/spack/repos/builtin/packages/bzip2/package.py index c4d497e6a8..ea1b883068 100644 --- a/var/spack/repos/builtin/packages/bzip2/package.py +++ b/var/spack/repos/builtin/packages/bzip2/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import re +import sys from spack.package import * @@ -24,11 +25,23 @@ class Bzip2(Package, SourcewarePackage): version("1.0.7", sha256="e768a87c5b1a79511499beb41500bcc4caf203726fff46a6f5f9ad27fe08ab2b") version("1.0.6", sha256="a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd") - variant("shared", default=True, description="Enables the build of shared libraries.") + variant( + "shared", + default=(sys.platform != "win32"), + description="Enables the build of shared libraries.", + ) variant("pic", default=False, description="Build static libraries with PIC") variant("debug", default=False, description="Enable debug symbols and disable optimization") - depends_on("diffutils", type="build") + # makefile.msc doesn't provide a shared recipe + conflicts( + "+shared", + when="platform=windows", + msg="Windows makefile has no recipe for shared builds, use ~shared.", + ) + + if sys.platform != "win32": + depends_on("diffutils", type="build") @classmethod def determine_version(cls, exe): @@ -52,9 +65,10 @@ class Bzip2(Package, SourcewarePackage): def patch(self): if self.spec.satisfies("+debug"): - for makefile in ["Makefile", "Makefile-libbz2_so"]: + for makefile in ["Makefile", "Makefile-libbz2_so", "makefile.msc"]: filter_file(r"-O ", "-O0 ", makefile) filter_file(r"-O2 ", "-O0 ", makefile) + filter_file(r"-Ox ", "-O0 ", makefile) # bzip2 comes with two separate Makefiles for static and dynamic builds # Tell both to use Spack's compiler wrapper instead of GCC @@ -82,13 +96,13 @@ class Bzip2(Package, SourcewarePackage): "$(CC) -dynamiclib -Wl,-install_name -Wl,@rpath/libbz2.{0}.dylib " "-current_version {1} -compatibility_version {2} -o libbz2.{3}.dylib $(OBJS)" ).format(v1, v2, v3, v3), - **kwargs + **kwargs, ) mf.filter( "$(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.{0}".format(v3), "$(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.{0}.dylib".format(v3), - **kwargs + **kwargs, ) mf.filter( "rm -f libbz2.so.{0}".format(v2), "rm -f libbz2.{0}.dylib".format(v2), **kwargs @@ -96,7 +110,7 @@ class Bzip2(Package, SourcewarePackage): mf.filter( "ln -s libbz2.so.{0} libbz2.so.{1}".format(v3, v2), "ln -s libbz2.{0}.dylib libbz2.{1}.dylib".format(v3, v2), - **kwargs + **kwargs, ) def install(self, spec, prefix): @@ -105,8 +119,23 @@ class Bzip2(Package, SourcewarePackage): make("-f", "Makefile-libbz2_so") # Build the static library and everything else - make() - make("install", "PREFIX={0}".format(prefix)) + if self.spec.satisfies("platform=windows"): + # Build step + nmake = Executable("nmake.exe") + nmake("-f", "makefile.msc") + # Install step + mkdirp(self.prefix.include) + mkdirp(self.prefix.lib) + mkdirp(self.prefix.bin) + mkdirp(self.prefix.man) + mkdirp(self.prefix.man.man1) + install("*.h", self.prefix.include) + install("*.lib", self.prefix.lib) + install("*.exe", self.prefix.bin) + install("*.1", self.prefix.man.man1) + else: + make() + make("install", "PREFIX={0}".format(prefix)) if "+shared" in spec: install("bzip2-shared", join_path(prefix.bin, "bzip2")) @@ -124,7 +153,9 @@ class Bzip2(Package, SourcewarePackage): for libname in (lib, lib1, lib2): symlink(lib3, libname) - with working_dir(prefix.bin): - force_remove("bunzip2", "bzcat") - symlink("bzip2", "bunzip2") - symlink("bzip2", "bzcat") + # These files won't be in a Windows installation + if not self.spec.satisfies("platform=windows"): + with working_dir(prefix.bin): + force_remove("bunzip2", "bzcat") + symlink("bzip2", "bunzip2") + symlink("bzip2", "bzcat") |