Compare commits

...

1 Commits

Author SHA1 Message Date
Todd Gamblin
3cdf4e7ccf
packages: eliminate unnecessary implicit string concatenation
Python lets you do things like

```python
"these are " "one string"

'so are' "these"
```

This can be useful for breaking strings over multiple lines. It also often happens
unintentionally and indicates that there are subtle errors in the code.

There are a lot of variant descriptions that have implicit concatenation harmlessly
due to refactors, e.g.:

```python
    variant("myvariant", default=True, description="this used to be" "on two lines")
```

But there are also real bugs, like this, where the author probably omitted a comma and
didn't notice that `black` reformatted the implicit concatenation onto one line:

```python
args = [
     "--with-thing",
     "--with-second-thing" "--with-third-thing",
]
```

And other bugs like this, where the author probably intended to add a space, but didn't:

```python
options = "${CFLAGS}" "${SPECIAL_PIC_OPTION}"
```

Some things are harmless but confusing:

```python
"first part of string {0} " "second part {1}".format("zero", "one")
```

It's not broken. String concatenation happens *before* the `format()` call, and the
whole string is formatted. But it sure is hard to read.

Unfortunately, you can't detect this stuff with an AST pass, as implicit concatenation
is done at the parsing phase. I had to detect this with grep:

```console
> grep -l '^[^"]*"[^"]*" "' */package.py
> grep -l "^[^']*'[^']*' '" */package.py
```

- [x] Get rid of nearly all implicit string concatenation in packages

Signed-off-by: Todd Gamblin <tgamblin@llnl.gov>
2025-01-31 20:35:21 -08:00
90 changed files with 137 additions and 169 deletions

View File

@ -140,8 +140,7 @@ def cmake_args(self):
if spec.satisfies("+torch"):
args.append("-DWITH_TORCH=On")
args.append(
"-DTorch_DIR={0}/lib/python{1}/site-packages"
"/torch/share/cmake/Torch".format(
"-DTorch_DIR={0}/lib/python{1}/site-packages/torch/share/cmake/Torch".format(
spec["py-torch"].prefix, spec["python"].version.up_to(2)
)
)

View File

@ -54,7 +54,7 @@ class Armcomputelibrary(SConsPackage):
variant(
"multi_isa",
default=False,
description="Build Multi ISA binary version of library." " Note works only for armv8.2-a.",
description="Build Multi ISA binary version of library. Note works only for armv8.2-a.",
)
variant(
"target_arch",

View File

@ -61,7 +61,7 @@ class Atlas(Package):
"tune_cpu",
default=-1,
multi=False,
description="Number of threads to tune to, " "-1 for autodetect, 0 for no threading",
description="Number of threads to tune to, -1 for autodetect, 0 for no threading",
)
conflicts(

View File

@ -8,9 +8,9 @@
def async_api_validator(pkg_name, variant_name, values):
if "none" in values and len(values) != 1:
raise SpackError("The value 'none' is not usable" " with other async_api values.")
raise SpackError("The value 'none' is not usable with other async_api values.")
if "intel_cppr" in values and "cray_dw" in values:
raise SpackError("The 'intel_cppr' and 'cray_dw' asynchronous" " APIs are incompatible.")
raise SpackError("The 'intel_cppr' and 'cray_dw' asynchronous APIs are incompatible.")
class Axl(CMakePackage):

View File

@ -376,9 +376,7 @@ def initconfig_hardware_entries(self):
if "+fortran" in spec and self.is_fortran_compiler("xlf"):
# Grab lib directory for the current fortran compiler
libdir = pjoin(os.path.dirname(os.path.dirname(self.compiler.fc)), "lib")
description = (
"Adds a missing rpath for libraries " "associated with the fortran compiler"
)
description = "Adds a missing rpath for libraries associated with the fortran compiler"
linker_flags = "${BLT_EXE_LINKER_FLAGS} -Wl,-rpath," + libdir

View File

@ -42,7 +42,7 @@ class Bcftools(AutotoolsPackage):
variant(
"libgsl",
default=False,
description="build options that require the GNU scientific " "library",
description="build options that require the GNU scientific library",
)
variant(

View File

@ -38,7 +38,7 @@ def llnl_link_helpers(options, spec, compiler):
options.append(cmake_cache_string("BLT_EXE_LINKER_FLAGS", flags, description))
if "cce" in compiler.cxx:
description = "Adds a missing rpath for libraries " "associated with the fortran compiler"
description = "Adds a missing rpath for libraries associated with the fortran compiler"
# Here is where to find libs that work for fortran
libdir = "/opt/cray/pe/cce/{0}/cce-clang/x86_64/lib".format(compiler.version)
linker_flags = "${{BLT_EXE_LINKER_FLAGS}} -Wl,-rpath,{0}".format(libdir)

View File

@ -40,9 +40,7 @@ class Bohrium(CMakePackage, CudaPackage):
variant("node", default=True, description="Build the node vector engine manager")
variant("proxy", default=False, description="Build the proxy vector engine manager")
variant(
"python",
default=True,
description="Build the numpy-like bridge " "to enable use from python",
"python", default=True, description="Build the numpy-like bridge to enable use from python"
)
variant("cbridge", default=True, description="Build the bridge interface towards plain C")

View File

@ -237,7 +237,7 @@ def libs(self):
values=("global", "protected", "hidden"),
default="hidden",
multi=False,
description="Default symbol visibility in compiled libraries " "(1.69.0 or later)",
description="Default symbol visibility in compiled libraries (1.69.0 or later)",
)
# Unicode support

View File

@ -53,7 +53,7 @@ class Bzip2(Package, SourcewarePackage):
@classmethod
def determine_version(cls, exe):
output = Executable(exe)("--help", output=str, error=str)
match = re.search(r"bzip2, a block-sorting file compressor." " Version ([^,]+)", output)
match = re.search(r"bzip2, a block-sorting file compressor. Version ([^,]+)", output)
return match.group(1) if match else None
# override default implementation

View File

@ -71,7 +71,7 @@ class Care(CachedCMakePackage, CudaPackage, ROCmPackage):
variant(
"implicit_conversions",
default=False,
description="Enable implicit" "conversions to/from raw pointers",
description="Enable implicit conversions to/from raw pointers",
)
variant("tests", default=False, description="Build tests")
variant("benchmarks", default=False, description="Build benchmarks.")

View File

@ -61,7 +61,7 @@ class CcsQcd(MakefilePackage):
def edit(self, spec, prefix):
if spec.satisfies("%gcc") and spec.satisfies("arch=aarch64:"):
chgopt = (
"FFLAGS =-O3 -ffixed-line-length-132 -g -fopenmp" " -mcmodel=large -funderscoring"
"FFLAGS =-O3 -ffixed-line-length-132 -g -fopenmp -mcmodel=large -funderscoring"
)
filter_file(
"FFLAGS =.*",

View File

@ -131,7 +131,7 @@ class Cgal(CMakePackage):
conflicts(
"~header_only",
when="@:4.9",
msg="Header only builds became optional in 4.9," " default thereafter",
msg="Header only builds became optional in 4.9, default thereafter",
)
def url_for_version(self, version):

View File

@ -351,7 +351,7 @@ def install(self, spec, prefix):
# This is a Charm++ limitation; it would lead to a
# build error
raise InstallError(
"The +tcp variant requires " "the backend=netlrts communication mechanism"
"The +tcp variant requires the backend=netlrts communication mechanism"
)
options.append("tcp")
if spec.satisfies("+omp"):

View File

@ -31,11 +31,9 @@ def edit(self, spec, prefix):
# Replace -fopenmp with self.compiler.openmp_flag
makefile.filter("-fopenmp", self.compiler.openmp_flag)
# Replace CXX with CXXFLAGS
cxx11_flag = self.compiler.cxx11_flag
makefile.filter(
"CXX.*=.*",
r"CXXFLAGS = -DCNVNATOR_VERSION=\"$(VERSION)\""
" $(OMPFLAGS)"
" {0}".format(self.compiler.cxx11_flag),
"CXX.*=.*", rf"CXXFLAGS = -DCNVNATOR_VERSION=\"$(VERSION)\" $(OMPFLAGS) {cxx11_flag}"
)
makefile.filter("$(CXX)", "$(CXX) $(CXXFLAGS)", string=True)
# Replace -I$(SAMDIR) with -I$(SAMINC)

View File

@ -78,9 +78,7 @@ def install(self, spec, prefix):
# rewrite the Makefile to use Spack's options all the time
if spec.satisfies("%gcc"):
if not spec.satisfies("%gcc@6:"):
raise InstallError(
"When using GCC, " "CosmoMC requires version gcc@6: for building"
)
raise InstallError("When using GCC, CosmoMC requires version gcc@6: for building")
choosecomp = "ifortErr=1" # choose gfortran
elif spec.satisfies("%intel"):
if not spec.satifies("%intel@14:"):

View File

@ -801,9 +801,10 @@ def edit(self, pkg, spec, prefix):
mkf.write("include {0}\n".format(self.pkg["plumed"].plumed_inc))
mkf.write("\n# COMPILER, LINKER, TOOLS\n\n")
mkf.write(
"FC = {0}\n" "CC = {1}\n" "CXX = {2}\n" "LD = {3}\n".format(fc, cc, cxx, fc)
)
mkf.write(f"FC = {fc}\n")
mkf.write(f"CC = {cc}\n")
mkf.write(f"CXX = {cxx}\n")
mkf.write(f"LD = {fc}\n")
if spec.satisfies("%intel"):
intel_bin_dir = ancestor(pkg.compiler.cc)

View File

@ -153,7 +153,7 @@ class DavSdk(BundlePackage, CudaPackage, ROCmPackage):
# ParaView needs @5.11: in order to use CUDA/ROCM, therefore it is the minimum
# required version since GPU capability is desired for ECP
dav_sdk_depends_on(
"paraview@5.11:+mpi+openpmd+python+kits+shared+catalyst+libcatalyst" " use_vtkm=on",
"paraview@5.11:+mpi+openpmd+python+kits+shared+catalyst+libcatalyst use_vtkm=on",
when="+paraview",
propagate=["adios2", "cuda", "hdf5", "rocm"] + amdgpu_target_variants + cuda_arch_variants,
)

View File

@ -418,18 +418,16 @@ class Dealii(CMakePackage, CudaPackage):
conflicts(
"+adol-c",
when="^trilinos+chaco",
msg="Symbol clash between the ADOL-C library and " "Trilinos SEACAS Chaco.",
msg="Symbol clash between the ADOL-C library and Trilinos SEACAS Chaco.",
)
conflicts(
"+adol-c",
when="^trilinos+exodus",
msg="Symbol clash between the ADOL-C library and " "Trilinos Netcdf.",
msg="Symbol clash between the ADOL-C library and Trilinos Netcdf.",
)
conflicts(
"+slepc",
when="~petsc",
msg="It is not possible to enable slepc interfaces " "without petsc.",
"+slepc", when="~petsc", msg="It is not possible to enable slepc interfaces without petsc."
)
def cmake_args(self):

View File

@ -60,7 +60,7 @@ class Dftbplus(CMakePackage, MakefilePackage):
"chimes",
default=False,
when="@21.2:",
description="Whether repulsive corrections" "via the ChIMES library should be enabled.",
description="Whether repulsive corrections via the ChIMES library should be enabled.",
)
variant(
"elsi",
@ -70,9 +70,7 @@ class Dftbplus(CMakePackage, MakefilePackage):
when="+mpi",
)
variant(
"gpu",
default=False,
description="Use the MAGMA library " "for GPU accelerated computation",
"gpu", default=False, description="Use the MAGMA library for GPU accelerated computation"
)
variant(
"mbd",
@ -107,7 +105,7 @@ class Dftbplus(CMakePackage, MakefilePackage):
variant(
"sockets",
default=False,
description="Whether the socket library " "(external control) should be linked",
description="Whether the socket library (external control) should be linked",
)
variant(
"transport",
@ -130,7 +128,7 @@ class Dftbplus(CMakePackage, MakefilePackage):
"dftd3",
default=False,
when="@:19.1",
description="Use DftD3 dispersion library " "(if you need this dispersion model)",
description="Use DftD3 dispersion library (if you need this dispersion model)",
)
depends_on("cmake@3.16:", type="build", when="@20.1:")

View File

@ -75,8 +75,7 @@ def config_docbook(self):
"--noout",
"--add",
"public",
"-//OASIS//ENTITIES DocBook XML Additional General Entities "
"V{0}//EN".format(version),
f"-//OASIS//ENTITIES DocBook XML Additional General Entities V{version}//EN",
f"file://{prefix}/dbgenent.mod",
docbook,
)
@ -116,7 +115,7 @@ def config_docbook(self):
"--noout",
"--add",
"public",
"ISO 8879:1986//ENTITIES Added Math Symbols: Arrow " "Relations//EN",
"ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN",
f"file://{ent_dir}/isoamsa.ent",
docbook,
)
@ -124,7 +123,7 @@ def config_docbook(self):
"--noout",
"--add",
"public",
"ISO 8879:1986//ENTITIES Added Math Symbols: Binary " "Operators//EN",
"ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN",
f"file://{ent_dir}/isoamsb.ent",
docbook,
)
@ -140,7 +139,7 @@ def config_docbook(self):
"--noout",
"--add",
"public",
"ISO 8879:1986//ENTITIES Added Math Symbols: " "Negated Relations//EN",
"ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN",
f"file://{ent_dir}/isoamsn.ent",
docbook,
)

View File

@ -56,7 +56,7 @@ class Dyninst(CMakePackage):
variant(
"openmp",
default=True,
description="Enable OpenMP support for ParseAPI " "(version 10.0.0 or later)",
description="Enable OpenMP support for ParseAPI (version 10.0.0 or later)",
)
variant("static", default=False, description="Build static libraries")

View File

@ -123,13 +123,13 @@ class Eccodes(CMakePackage):
conflicts(
"+netcdf",
when="~tools",
msg="Cannot enable the NetCDF conversion tool " "when the command line tools are disabled",
msg="Cannot enable the NetCDF conversion tool when the command line tools are disabled",
)
conflicts(
"~tools",
when="@:2.18.0",
msg="The command line tools can be disabled " "only starting version 2.19.0",
msg="The command line tools can be disabled only starting version 2.19.0",
)
for center, definitions in _definitions.items():

View File

@ -65,7 +65,7 @@ class Eckit(CMakePackage):
variant(
"unicode",
default=True,
description="Enable support for Unicode characters in Yaml/JSON" "parsers",
description="Enable support for Unicode characters in Yaml/JSON parsers",
)
variant("aio", default=True, description="Enable asynchronous IO")
variant("fismahigh", default=False, description="Apply patching for FISMA-high compliance")

View File

@ -170,7 +170,7 @@ class EcpDataVisSdk(BundlePackage, CudaPackage, ROCmPackage):
# ParaView needs @5.11: in order to use CUDA/ROCM, therefore it is the minimum
# required version since GPU capability is desired for ECP
dav_sdk_depends_on(
"paraview@5.11:+mpi+openpmd+python+kits+shared+catalyst+libcatalyst" " use_vtkm=on",
"paraview@5.11:+mpi+openpmd+python+kits+shared+catalyst+libcatalyst use_vtkm=on",
when="+paraview",
propagate=["adios2", "cuda", "hdf5", "rocm"] + amdgpu_target_variants + cuda_arch_variants,
)

View File

@ -39,7 +39,7 @@ class Elemental(CMakePackage):
variant(
"int64_blas",
default=False,
description="Use 64bit integers for BLAS." " Requires local build of BLAS library.",
description="Use 64bit integers for BLAS. Requires local build of BLAS library.",
)
variant("scalapack", default=False, description="Build with ScaLAPACK library")
variant(
@ -57,7 +57,7 @@ class Elemental(CMakePackage):
variant(
"mpfr",
default=False,
description="Support GNU MPFR's" "arbitrary-precision floating-point arithmetic",
description="Support GNU MPFR's arbitrary-precision floating-point arithmetic",
)
# Note that #1712 forces us to enumerate the different blas variants

View File

@ -48,7 +48,7 @@ def patch(self):
)
edit = FileFilter("CMakeLists.txt")
edit.filter(
r"\${CMAKE_CURRENT_SOURCE_DIR}/../bamtools/lib/" "libbamtools.a",
r"\${CMAKE_CURRENT_SOURCE_DIR}/../bamtools/lib/libbamtools.a",
"%s" % self.spec["bamtools"].libs,
)

View File

@ -31,12 +31,12 @@ class Flamemaster(CMakePackage):
variant(
"bilin_omega",
default=True,
description="Compile with bilinear interpolation" "for collision integrals (omega)",
description="Compile with bilinear interpolation for collision integrals (omega)",
)
variant(
"combustion",
default=False,
description="Integrate comustion libraries" "for kinetics, thermodynamics, and transport",
description="Integrate comustion libraries for kinetics, thermodynamics, and transport",
)
variant(
"fortran_code",
@ -109,7 +109,7 @@ class Flamemaster(CMakePackage):
variant(
"tests",
default=False,
description="Install google-test framework for unit tests" "and enable units tests.",
description="Install google-test framework for unit tests and enable units tests.",
)
variant(
"third_party_in_build_dir",

View File

@ -63,7 +63,7 @@ class Flexi(CMakePackage):
"parabolic",
default=True,
description=(
"Defines whether the parabolic part of the chosen system " "should be included or not"
"Defines whether the parabolic part of the chosen system should be included or not"
),
)
variant(

View File

@ -66,7 +66,7 @@ class Fortrilinos(CMakePackage):
depends_on("trilinos gotype=long_long")
# Full trilinos dependencies
depends_on(
"trilinos+amesos2+anasazi+belos+kokkos+ifpack2+muelu+nox+tpetra" "+stratimikos", when="+hl"
"trilinos+amesos2+anasazi+belos+kokkos+ifpack2+muelu+nox+tpetra+stratimikos", when="+hl"
)
@run_before("cmake")

View File

@ -35,9 +35,7 @@ class Freeipmi(AutotoolsPackage):
def configure_args(self):
# FIXME: If root checking of root installation is added fix this:
# Discussed in issue #4432
tty.warn(
"Requires 'root' for bmc-watchdog.service installation to" " /lib/systemd/system/ !"
)
tty.warn("Requires 'root' for bmc-watchdog.service installation to /lib/systemd/system/ !")
args = [
"--prefix={0}".format(prefix),

View File

@ -599,9 +599,7 @@ def determine_variants(cls, exes, version_str):
@classmethod
def validate_detected_spec(cls, spec, extra_attributes):
# For GCC 'compilers' is a mandatory attribute
msg = 'the extra attribute "compilers" must be set for ' 'the detected spec "{0}"'.format(
spec
)
msg = f"the extra attribute 'compilers' must be set for the detected spec '{spec}'"
assert "compilers" in extra_attributes, msg
compilers = extra_attributes["compilers"]
@ -1090,8 +1088,7 @@ def detect_gdc(self):
return candidate_gdc
else:
raise InstallError(
"Cannot resolve ambiguity when detecting GDC that belongs to "
"%{0}".format(self.compiler.spec),
f"Can't resolve ambiguity when detecting GDC for %{self.compiler.spec}",
long_msg="The candidates are:{0}{0}{1}{0}".format(
error_nl,
error_nl.join(

View File

@ -12,7 +12,7 @@ class GhostscriptFonts(Package, SourceforgePackage):
homepage = "https://ghostscript.com/"
sourceforge_mirror_path = (
"gs-fonts/gs-fonts/8.11%20%28base%2035%2C%20GPL%29/" "ghostscript-fonts-std-8.11.tar.gz"
"gs-fonts/gs-fonts/8.11%20%28base%2035%2C%20GPL%29/ghostscript-fonts-std-8.11.tar.gz"
)
license("GPL-2.0-or-later")

View File

@ -55,7 +55,7 @@ class Graphviz(AutotoolsPackage):
variant(
lang,
default=False,
description="Enable for optional {0} language " "bindings".format(lang),
description="Enable for optional {0} language bindings".format(lang),
)
# Feature variants
@ -147,7 +147,7 @@ class Graphviz(AutotoolsPackage):
conflicts(
"%gcc@:5.9",
when="@2.40.1+qt ^qt@5:",
msg="graphviz-2.40.1 needs gcc-6 or greater to compile with QT5 " "suppport",
msg="graphviz-2.40.1 needs gcc-6 or greater to compile with QT5 suppport",
)
def autoreconf(self, spec, prefix):

View File

@ -53,7 +53,7 @@ class Grpc(CMakePackage):
variant(
"codegen",
default=True,
description="Builds code generation plugins for protobuf " "compiler (protoc)",
description="Builds code generation plugins for protobuf compiler (protoc)",
)
variant(
"cxxstd",

View File

@ -602,7 +602,7 @@ def ensure_parallel_compiler_wrappers(self):
# 1.10.6 and 1.12.0. The current develop versions do not produce 'h5pfc'
# at all. Here, we make sure that 'h5pfc' is available when Fortran and
# MPI support are enabled (only for versions that generate 'h5fc').
if self.spec.satisfies("@1.8.22:1.8," "1.10.6:1.10.9," "1.12.0:1.12.2" "+fortran+mpi"):
if self.spec.satisfies("@1.8.22:1.8, 1.10.6:1.10.9, 1.12.0:1.12.2 +fortran+mpi"):
with working_dir(self.prefix.bin):
# No try/except here, fix the condition above instead:
symlink("h5fc", "h5pfc")

View File

@ -26,7 +26,7 @@ class Hicops(CMakePackage):
variant(
"timemory",
default=False,
description="Enable timemory interface. Requires timemory " "installation.",
description="Enable timemory interface. Requires timemory installation.",
)
variant(
"mpip",
@ -37,7 +37,7 @@ class Hicops(CMakePackage):
variant(
"tailfit",
default=True,
description="Use the tailfit method instead of Gumbelfit " "for e-value computation.",
description="Use the tailfit method instead of Gumbelfit for e-value computation.",
)
variant("progress", default=True, description="Display HiCOPS progress marks.")
variant(
@ -50,14 +50,14 @@ class Hicops(CMakePackage):
variant(
"qalen",
default="100",
description="Maximum number of top K peaks to keep when " "spectrum preprocess.",
description="Maximum number of top K peaks to keep when spectrum preprocess.",
values=int,
multi=False,
)
variant(
"qchunk",
default="10000",
description="Max size of each batch extracted from the " "dataset.",
description="Max size of each batch extracted from the dataset.",
values=int,
multi=False,
)

View File

@ -85,7 +85,7 @@ class Hiop(CMakePackage, CudaPackage, ROCmPackage):
variant(
"deepchecking",
default=False,
description="Ultra safety checks - " "used for increased robustness and self-diagnostics",
description="Ultra safety checks - used for increased robustness and self-diagnostics",
)
variant("ginkgo", default=False, description="Enable/disable ginkgo solver")
variant(

View File

@ -181,7 +181,8 @@ def configure_args(self):
"--with-openjdk-checksum=no",
"--with-nashorn-src-zip=" + self.stage[8].archive_file,
"--with-nashorn-checksum=no",
"--disable-maintainer-mode" "--disable-downloading",
"--disable-maintainer-mode",
"--disable-downloading",
"--disable-system-pcsc",
"--disable-system-sctp",
"--disable-system-kerberos",

View File

@ -38,7 +38,7 @@ class JsonC(CMakePackage, AutotoolsPackage):
def patch(self):
filter_file(
"-Wextra",
"-Wextra -Wno-error=implicit-fallthrough " "-Wno-error=unused-but-set-variable",
"-Wextra -Wno-error=implicit-fallthrough -Wno-error=unused-but-set-variable",
"Makefile.in",
)

View File

@ -68,7 +68,7 @@ class Jsoncpp(CMakePackage, MesonPackage):
def patch(self):
filter_file(
"return d >= min && d <= max;",
"return d >= static_cast<double>(min) && " "d <= static_cast<double>(max);",
"return d >= static_cast<double>(min) && d <= static_cast<double>(max);",
"src/lib_json/json_value.cpp",
)

View File

@ -45,7 +45,7 @@ class Libcint(CMakePackage):
variant(
"pypzpx",
default=False,
description="Enforce PYPZPX ordering of p-orbitals " "instead of PXPYPZ.",
description="Enforce PYPZPX ordering of p-orbitals instead of PXPYPZ.",
)
variant("test", default=False, description="Build test programs")
variant("shared", default=True, description="Build the shared library")

View File

@ -59,7 +59,7 @@ class Libint(AutotoolsPackage):
"fma",
default=False,
description=(
"Generate code utilizing FMA" " (requires capable CPU and recent enough compiler)"
"Generate code utilizing FMA (requires capable CPU and recent enough compiler)"
),
)

View File

@ -73,9 +73,7 @@ class Libunwind(AutotoolsPackage):
variant("xz", default=False, description="Support xz (lzma) compressed symbol tables.")
variant(
"zlib",
default=False,
description="Support zlib compressed symbol tables " "(1.5 and later).",
"zlib", default=False, description="Support zlib compressed symbol tables (1.5 and later)."
)
# The libunwind releases contain the autotools generated files,

View File

@ -55,7 +55,7 @@ class LlvmDoe(CMakePackage, CudaPackage):
variant(
"polly",
default=True,
description="Build the LLVM polyhedral optimization plugin, " "only builds for 3.7.0+",
description="Build the LLVM polyhedral optimization plugin, only builds for 3.7.0+",
)
variant("libcxx", default=True, description="Build the LLVM C++ standard library")
variant(
@ -288,9 +288,7 @@ def determine_variants(cls, exes, version_str):
@classmethod
def validate_detected_spec(cls, spec, extra_attributes):
# For LLVM 'compilers' is a mandatory attribute
msg = 'the extra attribute "compilers" must be set for ' 'the detected spec "{0}"'.format(
spec
)
msg = f"the extra attribute 'compilers' must be set for the detected spec '{spec}'"
assert "compilers" in extra_attributes, msg
compilers = extra_attributes["compilers"]
for key in ("c", "cxx"):

View File

@ -724,9 +724,7 @@ def determine_variants(cls, exes, version_str):
@classmethod
def validate_detected_spec(cls, spec, extra_attributes):
# For LLVM 'compilers' is a mandatory attribute
msg = 'the extra attribute "compilers" must be set for ' 'the detected spec "{0}"'.format(
spec
)
msg = f"the extra attribute 'compilers' must be set for the detected spec '{spec}'"
assert "compilers" in extra_attributes, msg
compilers = extra_attributes["compilers"]
for key in ("c", "cxx"):

View File

@ -41,7 +41,7 @@ class Mariadb(CMakePackage):
variant(
"nonblocking",
default=True,
description="Allow non blocking " "operations in the mariadb client library.",
description="Allow non blocking operations in the mariadb client library.",
)
provides("mariadb-client")

View File

@ -56,7 +56,7 @@ def patch(self):
# workaround anonymous version tag linker error for the NVIDIA
# compilers
filter_file(
"${wl}-version-script " "${wl}$output_objdir/$libname.ver",
"${wl}-version-script ${wl}$output_objdir/$libname.ver",
"",
"configure",
string=True,

View File

@ -83,7 +83,7 @@ class Mvapich2(MpichEnvironmentModifications, AutotoolsPackage):
description="List of the process managers to activate",
values=disjoint_sets(("auto",), ("slurm",), ("hydra", "gforker", "remshell"))
.prohibit_empty_set()
.with_error("'slurm' or 'auto' cannot be activated along with " "other process managers")
.with_error("'slurm' or 'auto' cannot be activated along with other process managers")
.with_default("auto")
.with_non_feature_values("auto"),
)

View File

@ -182,7 +182,7 @@ def construct_ldflags(self):
spec = self.spec
xpmem_ldflags = ""
if "feature=basic-xpmem" in spec or "feature=advanced-xpmem" in spec:
xpmem_ldflags = " -Wl,-rpath,/opt/xpmem/lib " "-L/opt/xpmem/lib -lxpmem"
xpmem_ldflags = " -Wl,-rpath,/opt/xpmem/lib -L/opt/xpmem/lib -lxpmem"
# Add default LDFLAGS and combine together
LDFLAGS = "LDFLAGS=-Wl,-rpath,XORIGIN/placeholder"

View File

@ -241,7 +241,7 @@ def _edit_arch_target_based(self, spec, prefix):
tty.info("Building binaries with AVX512-tile optimization")
copy("Linux-AVX512-icc.arch", arch_filename)
elif spec.version >= Version("2.14") and os.path.exists("Linux-SKX-icc.arch"):
tty.info("Building binaries with Skylake-X" "AVX512 optimization")
tty.info("Building binaries with Skylake-X AVX512 optimization")
copy("Linux-SKX-icc.arch", arch_filename)
else:
return False

View File

@ -81,7 +81,7 @@ def patch(self):
if self.spec.satisfies("@:22_0_0 ^boost@1.70:"):
with working_dir(join_path("include", "corelib")):
filter_file(
("unit_test::ut_detail::" "ignore_unused_variable_warning"),
("unit_test::ut_detail::ignore_unused_variable_warning"),
"ignore_unused",
"test_boost.hpp",
string=True,

View File

@ -162,7 +162,7 @@ def patch(self):
def install(self, spec, prefix):
if (self.compiler.fc is None) or (self.compiler.cc is None):
raise InstallError("NCL package requires both " "C and Fortran compilers.")
raise InstallError("NCL package requires both C and Fortran compilers.")
self.prepare_site_config()
self.prepare_install_config()

View File

@ -151,9 +151,7 @@ def install(self, spec, prefix):
filter_file(r"\$\(OLAGS\)", "-qextname $(OLAGS)", join_path("postnek", "makefile"))
# Define 'rename_' function that calls 'rename'
with open(join_path("postnek", "xdriver.c"), "a") as xdriver:
xdriver.write(
"\nvoid rename_(char *from, char *to)\n{\n" " rename(from, to);\n}\n"
)
xdriver.write("\nvoid rename_(char *from, char *to)\n{\n rename(from, to);\n}\n")
maxnel = self.spec.variants["MAXNEL"].value
filter_file(r"^#MAXNEL\s*=.*", "MAXNEL=" + maxnel, "maketools")

View File

@ -53,7 +53,7 @@ class Ngspice(AutotoolsPackage):
variant(
"debug",
default="auto",
description="Enable debugging features: " "auto is yes for build=lib, no for build=bin",
description="Enable debugging features: auto is yes for build=lib, no for build=bin",
values=("auto", "yes", "no"),
multi=False,
)

View File

@ -360,8 +360,8 @@ def test_recipe(self):
expected = [
"Running octopus",
"CalculationMode = recipe",
"DISCLAIMER: The authors do not " "guarantee that the implementation",
"recipe leads to an edible dish, " 'for it is clearly "system-dependent".',
"DISCLAIMER: The authors do not guarantee that the implementation",
'recipe leads to an edible dish, for it is clearly "system-dependent".',
"Calculation ended on",
]

View File

@ -473,7 +473,7 @@ class Openmpi(AutotoolsPackage, CudaPackage):
values=disjoint_sets(
("auto",), FABRICS # shared memory transports
).with_non_feature_values("auto", "none"),
description="List of fabrics that are enabled; " "'auto' lets openmpi determine",
description="List of fabrics that are enabled; 'auto' lets openmpi determine",
)
SCHEDULERS = ("alps", "lsf", "tm", "slurm", "sge", "loadleveler")
@ -694,7 +694,7 @@ def patch(self):
conflicts(
"schedulers=loadleveler",
when="@3:",
msg="The loadleveler scheduler is not supported with " "openmpi(>=3).",
msg="The loadleveler scheduler is not supported with openmpi(>=3).",
)
# According to this comment on github:

View File

@ -29,17 +29,17 @@ class P3dfft3(AutotoolsPackage):
variant(
"measure",
default=False,
description="Define if you want to use" "the measure fftw planner flag",
description="Define if you want to use the measure fftw planner flag",
)
variant(
"estimate",
default=False,
description="Define if you want to" "use the estimate fftw planner flag",
description="Define if you want to use the estimate fftw planner flag",
)
variant(
"patient",
default=False,
description="Define if you want to" "use the patient fftw planner flag",
description="Define if you want to use the patient fftw planner flag",
)
# TODO: Add more configure options!

View File

@ -26,7 +26,7 @@ class Paradiseo(CMakePackage):
variant(
"mpi",
default=True,
description="Compile with parallel and distributed " "metaheuristics module",
description="Compile with parallel and distributed metaheuristics module",
)
variant("smp", default=True, description="Compile with symmetric multi-processing module ")
variant("edo", default=True, description="Compile with (Experimental) EDO module")

View File

@ -41,7 +41,7 @@ class Pcre(AutotoolsPackage, CMakePackage):
variant(
"utf",
default=True,
description="Enable support for UTF-8/16/32, " "incompatible with EBCDIC.",
description="Enable support for UTF-8/16/32, incompatible with EBCDIC.",
)
variant("shared", default=True, description="Build shared libraries")

View File

@ -138,7 +138,7 @@ class Phist(CMakePackage):
variant(
"fortran",
default=True,
description="generate Fortran 2003 bindings (requires Python3 and " "a Fortran compiler)",
description="generate Fortran 2003 bindings (requires Python3 and a Fortran compiler)",
)
# Build error with LLVM and recent Trilinos, fixed in phist-1.12.1

View File

@ -75,7 +75,7 @@ def build_targets(self):
if "%gcc" in self.spec:
targets.append(
"FARGS=-g -fbounds-check -O3 -fopenmp " "-JModules -fallow-argument-mismatch"
"FARGS=-g -fbounds-check -O3 -fopenmp -JModules -fallow-argument-mismatch"
)
return targets

View File

@ -34,7 +34,7 @@ class Pism(CMakePackage):
variant(
"proj",
default=True,
description="Use Proj to compute cell areas, " "longitudes, and latitudes.",
description="Use Proj to compute cell areas, longitudes, and latitudes.",
)
variant("parallel-netcdf4", default=False, description="Enables parallel NetCDF-4 I/O.")
variant(

View File

@ -38,7 +38,7 @@ def check_fortran(self):
if self.spec.satisfies("+fortran"):
if is_no_fortran_compiler:
raise InstallError(
"pnmpi+fortran requires Fortran compiler " "but no Fortran compiler found!"
"pnmpi+fortran requires Fortran compiler but no Fortran compiler found!"
)
def cmake_args(self):

View File

@ -29,7 +29,7 @@ class Postgis(AutotoolsPackage):
"gui",
default=False,
description=(
"Build with GUI support, creating shp2pgsql-gui graphical interface " "to shp2pgsql"
"Build with GUI support, creating shp2pgsql-gui graphical interface to shp2pgsql"
),
)

View File

@ -44,7 +44,7 @@ class Povray(AutotoolsPackage):
variant(
"io-restrictions",
default=True,
description="Enable POV-Rays mechanism for control of I/O " "operations",
description="Enable POV-Rays mechanism for control of I/O operations",
)
variant("jpeg", default=True, description="Build with jpeg support")
variant("libpng", default=True, description="Build with libpng support")

View File

@ -27,7 +27,7 @@ class PyCharm4py(PythonPackage):
variant(
"mpi",
default=True,
description="build Charm++ library with the MPI instead of TCP" " communication layer",
description="build Charm++ library with the MPI instead of TCP communication layer",
)
# Builds its own charm++, so no charmpp dependency

View File

@ -51,15 +51,13 @@ class PyUproot(PythonPackage):
variant("xrootd", default=True, description="Build with xrootd support ")
variant(
"lz4",
default=True,
description="Build with support for reading " "lz4-compressed rootfiles ",
"lz4", default=True, description="Build with support for reading lz4-compressed rootfiles "
)
variant(
"zstd",
default=True,
description="Build with support for reading " "zstd-compressed rootfiles ",
description="Build with support for reading zstd-compressed rootfiles ",
)
depends_on("python@2.6:2,3.5:", type=("build", "run"))

View File

@ -132,15 +132,13 @@ class Qmcpack(CMakePackage, CudaPackage):
conflicts("%gcc@:8", when="@3.15.0:")
# QMCPACK 3.10.0 increased the minimum requirements for compiler versions
newer_compiler_warning = (
"QMCPACK v3.10.0 or later requires a newer " "version of this compiler"
)
newer_compiler_warning = "QMCPACK v3.10.0 or later requires a newer version of this compiler"
conflicts("%gcc@:6", when="@3.10.0:", msg=newer_compiler_warning)
conflicts("%intel@:18", when="@3.10.0:", msg=newer_compiler_warning)
conflicts("%clang@:6", when="@3.10.0:", msg=newer_compiler_warning)
# QMCPACK 3.6.0 or later requires support for C++14
cpp14_warning = "QMCPACK v3.6.0 or later requires a " "compiler with support for C++14"
cpp14_warning = "QMCPACK v3.6.0 or later requires a compiler with support for C++14"
conflicts("%gcc@:4", when="@3.6.0:", msg=cpp14_warning)
conflicts("%intel@:17", when="@3.6.0:", msg=cpp14_warning)
conflicts("%clang@:3.4", when="@3.6.0:", msg=cpp14_warning)
@ -330,7 +328,7 @@ def cmake_args(self):
cuda_arch = cuda_arch_list[0]
if len(cuda_arch_list) > 1:
raise InstallError(
"QMCPACK only supports compilation for a single " "GPU architecture at a time"
"QMCPACK only supports compilation for a single GPU architecture at a time"
)
if "@3.14.0:" in self.spec:
args.append("-DCMAKE_CUDA_ARCHITECTURES={0}".format(cuda_arch))

View File

@ -191,7 +191,7 @@ class QuantumEspresso(CMakePackage, Package):
)
conflicts(
"@6.3:6.4.0 hdf5=serial",
msg="QE-to-QMCPACK wave function converter only " "supported with parallel HDF5",
msg="QE-to-QMCPACK wave function converter only supported with parallel HDF5",
)
conflicts("@:7.0 hdf5=none", msg="QE-to-QMCPACK wave function converter requires HDF5")
# QE > 7.0, the converter for QMCPACK can be built without hdf5 enabled in QE.

View File

@ -27,7 +27,7 @@ class R3d(CMakePackage):
"r3d_max_verts",
default="0",
description=(
"Maximum number of vertices allowed in a polyhedron " "(versions 2021-03-10 or later)"
"Maximum number of vertices allowed in a polyhedron (versions 2021-03-10 or later)"
),
)

View File

@ -52,7 +52,7 @@ class Regcm(AutotoolsPackage):
variant(
"pnetcdf",
default=False,
description="Build NetCDF using the high performance parallel " "NetCDF implementation.",
description="Build NetCDF using the high performance parallel NetCDF implementation.",
)
depends_on("netcdf-c")
@ -110,13 +110,13 @@ def configure_args(self):
# compiler from GCC and Intel, which are the only compiler
# supported by RegCM 4.7.x.
raise InstallError(
"Architecture optimizations are available " "only for GCC and Intel compilers."
"Architecture optimizations are available only for GCC and Intel compilers."
)
if len(optimizations) > 1 and self.spec.satisfies(r"%gcc"):
# https://github.com/spack/spack/issues/974
raise InstallError(
"The GCC compiler does not support " "multiple architecture optimizations."
"The GCC compiler does not support multiple architecture optimizations."
)
# RegCM configure script treats --disable-X as --enable-X, so we

View File

@ -64,7 +64,7 @@ class Relion(CMakePackage, CudaPackage):
"allow_ctf_in_sagd",
default=True,
description=(
"Allow CTF-modulation in SAGD, " "as specified in Claim 1 of patent US10,282,513B2"
"Allow CTF-modulation in SAGD, as specified in Claim 1 of patent US10,282,513B2"
),
)
variant("altcpu", default=False, description="Use CPU acceleration", when="~cuda")
@ -72,7 +72,7 @@ class Relion(CMakePackage, CudaPackage):
variant(
"external_motioncor2",
default=False,
description="Have external motioncor2 available in addition to " "Relion builtin",
description="Have external motioncor2 available in addition to Relion builtin",
)
depends_on("mpi")

View File

@ -149,7 +149,7 @@ def install_pkgconfig(self):
f.write("\n")
f.write("Name: rocksdb\n")
f.write(
"Description: RocksDB: A Persistent Key-Value Store for" " Flash and RAM Storage\n"
"Description: RocksDB: A Persistent Key-Value Store for Flash and RAM Storage\n"
)
f.write("Version: {0}\n".format(self.spec.version))
f.write("Cflags: -I${includedir}\n")

View File

@ -120,7 +120,8 @@ def configure_args(self):
"--disable-gdbtk",
"--disable-shared",
"--with-expat",
"--with-system-zlib" "--without-guile",
"--with-system-zlib",
"--without-guile",
"--with-babeltrace",
"--with-lzma",
"--with-python",

View File

@ -204,7 +204,7 @@ class Root(CMakePackage):
variant(
"gminimal",
default=True,
description="Ignore most of Root's feature defaults except for " "basic graphic options",
description="Ignore most of Root's feature defaults except for basic graphic options",
)
variant("gsl", default=True, description="Enable linking against shared libraries for GSL")
variant("http", default=False, description="Enable HTTP server support")
@ -227,7 +227,7 @@ class Root(CMakePackage):
variant(
"mlp",
default=False,
description="Enable support for TMultilayerPerceptron " "classes' federation",
description="Enable support for TMultilayerPerceptron classes' federation",
)
variant("mysql", default=False, description="Enable support for MySQL databases")
variant("opengl", default=True, description="Enable OpenGL support")

View File

@ -121,7 +121,7 @@ def patch(self):
if self.spec.satisfies("@0.8.2:0.9.1"):
filter_file(
"${FAST_MALLOC_LIB}",
"${FAST_MALLOC_LIB}\n" "${CMAKE_DL_LIBS}",
"${FAST_MALLOC_LIB}\n${CMAKE_DL_LIBS}",
"src/CMakeLists.txt",
string=True,
)

View File

@ -102,7 +102,7 @@ class Scr(CMakePackage):
"dtcmp",
default=True,
when="@:2",
description="Build with DTCMP. " "Necessary to enable user directory naming at runtime",
description="Build with DTCMP. Necessary to enable user directory naming at runtime",
)
depends_on("dtcmp", when="+dtcmp")
depends_on("dtcmp", when="@3:")

View File

@ -40,7 +40,7 @@ class Serialbox(CMakePackage):
variant(
"std-filesystem",
default=True,
description="use std::experimental::filesystem (no dependency on " "compiled boost libs)",
description="use std::experimental::filesystem (no dependency on compiled boost libs)",
)
depends_on("cmake@3.12:", type="build")
@ -73,12 +73,12 @@ class Serialbox(CMakePackage):
conflicts(
"+ftg",
when="~fortran",
msg="the FortranTestGenerator frontend requires the Fortran " "interface",
msg="the FortranTestGenerator frontend requires the Fortran interface",
)
conflicts(
"+ftg",
when="@:2.2.999",
msg="the FortranTestGenerator frontend is supported only " "starting version 2.3.0",
msg="the FortranTestGenerator frontend is supported only starting version 2.3.0",
)
conflicts("+sdb", when="~python", msg="the stencil debugger requires the Python interface")
conflicts("+fortran", when="~c", msg="the Fortran interface requires the C interface")

View File

@ -42,7 +42,7 @@ class Sollve(CMakePackage):
variant(
"link_dylib",
default=False,
description="Build and link the libLLVM shared library rather " "than static",
description="Build and link the libLLVM shared library rather than static",
)
variant(
"all_targets",

View File

@ -58,7 +58,7 @@ def mpicxx_check(self):
raise RuntimeError(msg)
if "+fortran" in self.spec:
if "fmpi" not in self.spec["fortran"].libs.names:
msg = "SPRNG requires fortran mpi " "libraries with mpi enabled"
msg = "SPRNG requires fortran mpi libraries with mpi enabled"
raise RuntimeError(msg)
# raise RuntimeError("test")

View File

@ -159,7 +159,7 @@ def get_variant(name, has_variant):
# check for fts
def query_fts(version):
return "CREATE VIRTUAL TABLE name " "USING fts{:d}(sender, title, body);".format(
return "CREATE VIRTUAL TABLE name USING fts{:d}(sender, title, body);".format(
version
)

View File

@ -44,7 +44,7 @@ def build(self, spec, prefix):
elif plat.startswith("darwin"):
make("-f", "Makefile.MacOS")
else:
raise InstallError("The communication mechanism %s is not" "supported" % plat)
raise InstallError("The communication mechanism %s is not supported" % plat)
def install(self, spec, prefix):
install_tree("bin", prefix.bin)

View File

@ -40,7 +40,7 @@ class Timemory(CMakePackage, PythonExtension):
variant(
"python_hatchet",
default=False,
description="Build Python hatchet submodule " "(does not conflict with py-hatchet)",
description="Build Python hatchet submodule (does not conflict with py-hatchet)",
)
variant(
"python_line_profiler",
@ -77,9 +77,7 @@ class Timemory(CMakePackage, PythonExtension):
variant(
"kokkos_tools",
default=False,
description=(
"Build generic kokkos-tools libraries, e.g. " "kp_timemory, kp_timemory_filter"
),
description=("Build generic kokkos-tools libraries, e.g. kp_timemory, kp_timemory_filter"),
)
variant(
"kokkos_build_config",
@ -122,7 +120,7 @@ class Timemory(CMakePackage, PythonExtension):
variant(
"cpu_target",
default="auto",
description=("Build for specific cpu architecture (specify " "cpu-model)"),
description=("Build for specific cpu architecture (specify cpu-model)"),
)
variant(
"use_arch",
@ -143,7 +141,7 @@ class Timemory(CMakePackage, PythonExtension):
variant(
"statistics",
default=True,
description=("Build components w/ support for statistics " "(min/max/stddev)"),
description=("Build components w/ support for statistics (min/max/stddev)"),
)
variant(
"extra_optimizations",
@ -179,7 +177,7 @@ class Timemory(CMakePackage, PythonExtension):
variant(
"require_packages",
default=True,
description=("find_package(...) resulting in NOTFOUND " "generates error"),
description=("find_package(...) resulting in NOTFOUND generates error"),
)
variant("compiler", default=True, description="Enable compiler instrumentation support")
variant(

View File

@ -42,7 +42,7 @@ class Turbomole(Package):
def do_fetch(self, mirror_only=True):
if "+mpi" in self.spec and "+smp" in self.spec:
raise InstallError("Can not have both SMP and MPI enabled in the " "same build.")
raise InstallError("Can not have both SMP and MPI enabled in the same build.")
super().do_fetch(mirror_only)
def get_tm_arch(self):

View File

@ -108,12 +108,12 @@ def edit(self, spec, prefix):
)
filter_file(
"../../wannier90.x: .*",
"../../wannier90.x: $(OBJS) " "../wannier_prog.F90 $(LIBRARY)",
"../../wannier90.x: $(OBJS) ../wannier_prog.F90 $(LIBRARY)",
join_path(self.stage.source_path, "src/Makefile.2"),
)
filter_file(
"../../postw90.x: $(OBJS_POST) " "$(POSTDIR)postw90.F90",
"../../postw90.x: $(OBJS_POST) " "$(POSTDIR)postw90.F90 $(LIBRARY)",
"../../postw90.x: $(OBJS_POST) $(POSTDIR)postw90.F90",
"../../postw90.x: $(OBJS_POST) $(POSTDIR)postw90.F90 $(LIBRARY)",
join_path(self.stage.source_path, "src/Makefile.2"),
string=True,
)
@ -139,8 +139,8 @@ def edit(self, spec, prefix):
string=True,
)
filter_file(
"$(AR) $(ARFLAGS) " "$(LIBRARY) $(OBJS2) $(OBJS)",
"$(MPIF90) $(FCOPTS) -shared -o " "$(LIBRARY) $(OBJS2) $(OBJS) $(LIBS)",
"$(AR) $(ARFLAGS) $(LIBRARY) $(OBJS2) $(OBJS)",
"$(MPIF90) $(FCOPTS) -shared -o $(LIBRARY) $(OBJS2) $(OBJS) $(LIBS)",
join_path(self.stage.source_path, "src/Makefile.2"),
string=True,
)

View File

@ -79,7 +79,7 @@ class Whizard(AutotoolsPackage):
depends_on("qgraf", when="+gosam")
depends_on(
"openloops@2.0.0: +compile_extra num_jobs=1 " "processes=eett,eevvjj,ppllj,tbw",
"openloops@2.0.0: +compile_extra num_jobs=1 processes=eett,eevvjj,ppllj,tbw",
when="+openloops",
)
depends_on("texlive", when="+latex")

View File

@ -456,7 +456,7 @@ def configure(self, spec, prefix):
break
if stallcounter > 300:
raise InstallError(
"Output stalled for 30s, presumably an " "undetected question."
"Output stalled for 30s, presumably an undetected question."
)
time.sleep(0.1) # Try to do a bit of rate limiting
stallcounter += 1
@ -509,7 +509,7 @@ def build(self, spec, prefix):
result = self.run_compile_script()
if not result:
tty.warn("Compilation failed first time (WRF idiosyncrasies?) " "- trying again...")
tty.warn("Compilation failed first time (WRF idiosyncrasies?) - trying again...")
result = self.run_compile_script()
if not result:

View File

@ -40,9 +40,7 @@ class Wt(CMakePackage):
variant("postgresql", default=False, description="create PostgreSQL DBO")
# variant('firebird', default=False, description='create Firebird DBO')
variant(
"pango",
default=True,
description="improved font support in PDF and raster image " "painting",
"pango", default=True, description="improved font support in PDF and raster image painting"
)
variant("zlib", default=True, description="compression in the built-in httpd")
# variant('fastcgi', default=False,

View File

@ -141,7 +141,7 @@ def edit(self, pkg, spec, prefix):
class GenericBuilder(spack.build_systems.generic.GenericBuilder, SetupEnvironment):
def install(self, pkg, spec, prefix):
nmake("-f" "win32\\Makefile.msc")
nmake("-f", "win32\\Makefile.msc")
build_dir = pkg.stage.source_path
install_tree = {
"bin": glob.glob(os.path.join(build_dir, "*.dll")),