summaryrefslogtreecommitdiff
path: root/lib/spack/spack/cmd/create.py
diff options
context:
space:
mode:
authorMilton Woods <miltonjwoods@gmail.com>2017-03-31 09:38:58 +1000
committerTodd Gamblin <tgamblin@llnl.gov>2017-03-30 16:38:58 -0700
commit9e43ff821c1549d5813eebd5a9ca81a7869786e7 (patch)
treec7f4ad5e12302acae6ebc1a286e384b5b0ae617c /lib/spack/spack/cmd/create.py
parent9e1abb13dcc4fb21042c6ca3b2e5c445811d6c15 (diff)
downloadspack-9e43ff821c1549d5813eebd5a9ca81a7869786e7.tar.gz
spack-9e43ff821c1549d5813eebd5a9ca81a7869786e7.tar.bz2
spack-9e43ff821c1549d5813eebd5a9ca81a7869786e7.tar.xz
spack-9e43ff821c1549d5813eebd5a9ca81a7869786e7.zip
Extendable Perl (#3614)
* perl: make extendable and add Module::Build package * perl: allow 'spack create' to identify perl packages from their contents * perl-module-build: fix indenting of package docstring * perl: split install() method for extensions into phases * perl: auto-detect build method (Makefile.PL vs Build.PL) and define a 'check' method * PerlPackage: use import statements similar to those in AutotoolsPackage * PerlModule: fix detection of Build.PL * PerlPackageTemplate: remove extraneous lines to avoid flake8 warnings * PerlPackageTemplate: split into separate templates for Makefile.PL and Build.PL * PerlPackage: add cross-references to docstrings * AutotoolsPackage: fix ambiguous cross-references to avoid errors in doc tests * PerlbuildPackageTemplate: depend on perl-module-build if Build.PL exists
Diffstat (limited to 'lib/spack/spack/cmd/create.py')
-rw-r--r--lib/spack/spack/cmd/create.py45
1 files changed, 44 insertions, 1 deletions
diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py
index 14b213a756..cc90669158 100644
--- a/lib/spack/spack/cmd/create.py
+++ b/lib/spack/spack/cmd/create.py
@@ -268,6 +268,45 @@ class RPackageTemplate(PackageTemplate):
super(RPackageTemplate, self).__init__(name, *args)
+class PerlmakePackageTemplate(PackageTemplate):
+ """Provides appropriate overrides for Perl extensions
+ that come with a Makefile.PL"""
+ base_class_name = 'PerlPackage'
+
+ dependencies = """\
+ # FIXME: Add dependencies if required:
+ # depends_on('perl-foo')
+ # depends_on('barbaz', type=('build', 'link', 'run'))"""
+
+ body = """\
+ # FIXME: If non-standard arguments are used for configure step:
+ # def configure_args(self):
+ # return ['my', 'configure', 'args']
+
+ # FIXME: in unusual cases, it may be necessary to override methods for
+ # configure(), build(), check() or install()."""
+
+ def __init__(self, name, *args):
+ # If the user provided `--name perl-cpp`, don't rename it perl-perl-cpp
+ if not name.startswith('perl-'):
+ # Make it more obvious that we are renaming the package
+ tty.msg("Changing package name from {0} to perl-{0}".format(name))
+ name = 'perl-{0}'.format(name)
+
+ super(PerlmakePackageTemplate, self).__init__(name, *args)
+
+
+class PerlbuildPackageTemplate(PerlmakePackageTemplate):
+ """Provides appropriate overrides for Perl extensions
+ that come with a Build.PL instead of a Makefile.PL"""
+ dependencies = """\
+ depends_on('perl-module-build', type='build')
+
+ # FIXME: Add additional dependencies if required:
+ # depends_on('perl-foo')
+ # depends_on('barbaz', type=('build', 'link', 'run'))"""
+
+
class OctavePackageTemplate(PackageTemplate):
"""Provides appropriate overrides for octave packages"""
@@ -305,6 +344,8 @@ templates = {
'bazel': BazelPackageTemplate,
'python': PythonPackageTemplate,
'r': RPackageTemplate,
+ 'perlmake': PerlmakePackageTemplate,
+ 'perlbuild': PerlbuildPackageTemplate,
'octave': OctavePackageTemplate,
'generic': PackageTemplate
}
@@ -363,7 +404,9 @@ class BuildSystemGuesser:
(r'/SConstruct$', 'scons'),
(r'/setup.py$', 'python'),
(r'/NAMESPACE$', 'r'),
- (r'/WORKSPACE$', 'bazel')
+ (r'/WORKSPACE$', 'bazel'),
+ (r'/Build.PL$', 'perlbuild'),
+ (r'/Makefile.PL$', 'perlmake'),
]
# Peek inside the compressed file.