From 081918d71a9d58108b8617d8324fd51542161a1e Mon Sep 17 00:00:00 2001 From: Denis Davydov Date: Wed, 6 Jul 2016 22:45:30 +0200 Subject: [PATCH 1/3] add --run-tests argument for install() --- lib/spack/spack/cmd/install.py | 5 +++++ lib/spack/spack/package.py | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/spack/spack/cmd/install.py b/lib/spack/spack/cmd/install.py index 9d3175786b7..fadfa7f7c38 100644 --- a/lib/spack/spack/cmd/install.py +++ b/lib/spack/spack/cmd/install.py @@ -55,6 +55,10 @@ def setup_parser(subparser): help="Fake install. Just remove the prefix and touch a fake file in it.") subparser.add_argument( 'packages', nargs=argparse.REMAINDER, help="specs of packages to install") + subparser.add_argument( + '--run-tests', action='store_true', dest='run_tests', + help="Run tests during installation of a package.") + def install(parser, args): @@ -77,6 +81,7 @@ def install(parser, args): keep_stage=args.keep_stage, ignore_deps=args.ignore_deps, make_jobs=args.jobs, + run_tests=args.run_tests, verbose=args.verbose, fake=args.fake, explicit=True) diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index 53c521b7760..bce6af9c020 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -311,6 +311,8 @@ class SomePackage(Package): parallel = True """# jobs to use for parallel make. If set, overrides default of ncpus.""" make_jobs = None + """By default do not run tests within package's install()""" + run_tests = False """Most packages are NOT extendable. Set to True if you want extensions.""" extendable = False """List of prefix-relative file paths (or a single path). If these do @@ -755,7 +757,7 @@ def do_fetch(self, mirror_only=False): self.stage.check() self.stage.cache_local() - + def do_stage(self, mirror_only=False): """Unpacks the fetched tarball, then changes into the expanded tarball @@ -881,6 +883,7 @@ def do_install(self, skip_patch=False, verbose=False, make_jobs=None, + run_tests=False, fake=False, explicit=False, install_phases = install_phases): @@ -900,6 +903,7 @@ def do_install(self, skip_patch -- Skip patch stage of build if True. verbose -- Display verbose build output (by default, suppresses it) make_jobs -- Number of make jobs to use for install. Default is ncpus + run_tests -- Runn tests within the package's install() """ if not self.spec.concrete: raise ValueError("Can only install concrete packages.") @@ -930,7 +934,11 @@ def do_install(self, fake=fake, skip_patch=skip_patch, verbose=verbose, - make_jobs=make_jobs) + make_jobs=make_jobs, + run_tests=run_tests) + + # Set run_tests flag before starting build. + self.run_tests = run_tests # Set parallelism before starting build. self.make_jobs = make_jobs @@ -1527,15 +1535,15 @@ def install_setup(self): raise InstallError("Package %s provides no install_setup() method!" % self.name) def install_configure(self): - """Runs the configure process.""" + """Runs the configure process.""" raise InstallError("Package %s provides no install_configure() method!" % self.name) def install_build(self): - """Runs the build process.""" + """Runs the build process.""" raise InstallError("Package %s provides no install_build() method!" % self.name) def install_install(self): - """Runs the install process.""" + """Runs the install process.""" raise InstallError("Package %s provides no install_install() method!" % self.name) def install(self, spec, prefix): From c096bb332a7710a0618049f0e2df1800771bd3f9 Mon Sep 17 00:00:00 2001 From: Denis Davydov Date: Wed, 6 Jul 2016 22:45:43 +0200 Subject: [PATCH 2/3] petsc: fix unit tests --- .../repos/builtin/packages/petsc/package.py | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py index 6a7bee97885..90afdbdb90c 100644 --- a/var/spack/repos/builtin/packages/petsc/package.py +++ b/var/spack/repos/builtin/packages/petsc/package.py @@ -149,20 +149,22 @@ def install(self, spec, prefix): make("install") # solve Poisson equation in 2D to make sure nothing is broken: - with working_dir('src/ksp/ksp/examples/tutorials'): - cc = os.environ['CC'] if '~mpi' in self.spec else self.spec['mpi'].mpicc # NOQA: ignore=E501 - os.system('%s ex50.c -I%s -L%s -lpetsc -o ex50' % ( - cc, prefix.include, prefix.lib)) - ex50 = Executable('./ex50') - ex50('-da_grid_x', '4', '-da_grid_y', '4') - if 'superlu-dist' in spec: - ex50('-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'lu', '-pc_factor_mat_solver_package', 'superlu_dist') # NOQA: ignore=E501 + if ('mpi' in spec) and self.run_tests: + with working_dir('src/ksp/ksp/examples/tutorials'): + env['PETSC_DIR'] = self.prefix + cc = Executable(spec['mpi'].mpicc) + cc('ex50.c', '-I%s' % prefix.include, '-L%s' % prefix.lib, + '-lpetsc', '-o', 'ex50') + run = Executable(join_path(spec['mpi'].prefix.bin, 'mpirun')) + run('ex50', '-da_grid_x', '4', '-da_grid_y', '4') + if 'superlu-dist' in spec: + run('ex50', '-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'lu', '-pc_factor_mat_solver_package', 'superlu_dist') # NOQA: ignore=E501 - if 'mumps' in spec: - ex50('-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'lu', '-pc_factor_mat_solver_package', 'mumps') # NOQA: ignore=E501 + if 'mumps' in spec: + run('ex50', '-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'lu', '-pc_factor_mat_solver_package', 'mumps') # NOQA: ignore=E501 - if 'hypre' in spec: - ex50('-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'hypre', '-pc_hypre_type', 'boomeramg') # NOQA: ignore=E501 + if 'hypre' in spec: + run('ex50', '-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'hypre', '-pc_hypre_type', 'boomeramg') # NOQA: ignore=E501 def setup_dependent_environment(self, spack_env, run_env, dependent_spec): # set up PETSC_DIR for everyone using PETSc package From e482994a1505bf7b8e506872c8ac205fce68b217 Mon Sep 17 00:00:00 2001 From: Denis Davydov Date: Sat, 9 Jul 2016 08:12:34 +0200 Subject: [PATCH 3/3] petsc: add -lm when building example --- var/spack/repos/builtin/packages/petsc/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py index 90afdbdb90c..11f5c36c22f 100644 --- a/var/spack/repos/builtin/packages/petsc/package.py +++ b/var/spack/repos/builtin/packages/petsc/package.py @@ -154,7 +154,7 @@ def install(self, spec, prefix): env['PETSC_DIR'] = self.prefix cc = Executable(spec['mpi'].mpicc) cc('ex50.c', '-I%s' % prefix.include, '-L%s' % prefix.lib, - '-lpetsc', '-o', 'ex50') + '-lpetsc', '-lm', '-o', 'ex50') run = Executable(join_path(spec['mpi'].prefix.bin, 'mpirun')) run('ex50', '-da_grid_x', '4', '-da_grid_y', '4') if 'superlu-dist' in spec: