diff options
author | Milton Woods <miltonjwoods@gmail.com> | 2017-03-31 09:38:58 +1000 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2017-03-30 16:38:58 -0700 |
commit | 9e43ff821c1549d5813eebd5a9ca81a7869786e7 (patch) | |
tree | c7f4ad5e12302acae6ebc1a286e384b5b0ae617c /lib/spack/spack/cmd/create.py | |
parent | 9e1abb13dcc4fb21042c6ca3b2e5c445811d6c15 (diff) | |
download | spack-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.py | 45 |
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. |