From f0f230d480004161c8f052d2ccf334a4f5ce25f8 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Tue, 17 Jan 2017 19:42:45 -0600 Subject: Allow spack create to detect packages that need to run autoreconf (#2848) --- lib/spack/spack/cmd/create.py | 62 ++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py index 2575229581..19128e3513 100644 --- a/lib/spack/spack/cmd/create.py +++ b/lib/spack/spack/cmd/create.py @@ -136,7 +136,8 @@ class PackageTemplate(object): class AutotoolsPackageTemplate(PackageTemplate): - """Provides appropriate overrides for Autotools-based packages""" + """Provides appropriate overrides for Autotools-based packages + that *do* come with a ``configure`` script""" base_class_name = 'AutotoolsPackage' @@ -152,6 +153,33 @@ class AutotoolsPackageTemplate(PackageTemplate): return args""" +class AutoreconfPackageTemplate(PackageTemplate): + """Provides appropriate overrides for Autotools-based packages + that *do not* come with a ``configure`` script""" + + base_class_name = 'AutotoolsPackage' + + dependencies = """\ + depends_on('autoconf', type='build') + depends_on('automake', type='build') + depends_on('libtool', type='build') + depends_on('m4', type='build') + + # FIXME: Add additional dependencies if required. + # depends_on('foo')""" + + body = """\ + def autoreconf(self, spec, prefix): + # FIXME: Modify the autoreconf method as necessary + autoreconf('--install', '--verbose', '--force') + + def configure_args(self): + # FIXME: Add arguments other than --prefix + # FIXME: If not needed delete this function + args = [] + return args""" + + class CMakePackageTemplate(PackageTemplate): """Provides appropriate overrides for CMake-based packages""" @@ -269,14 +297,15 @@ class OctavePackageTemplate(PackageTemplate): templates = { - 'autotools': AutotoolsPackageTemplate, - 'cmake': CMakePackageTemplate, - 'scons': SconsPackageTemplate, - 'bazel': BazelPackageTemplate, - 'python': PythonPackageTemplate, - 'r': RPackageTemplate, - 'octave': OctavePackageTemplate, - 'generic': PackageTemplate + 'autotools': AutotoolsPackageTemplate, + 'autoreconf': AutoreconfPackageTemplate, + 'cmake': CMakePackageTemplate, + 'scons': SconsPackageTemplate, + 'bazel': BazelPackageTemplate, + 'python': PythonPackageTemplate, + 'r': RPackageTemplate, + 'octave': OctavePackageTemplate, + 'generic': PackageTemplate } @@ -326,12 +355,14 @@ class BuildSystemGuesser: # uses. If the regular expression matches a file contained in the # archive, the corresponding build system is assumed. clues = [ - (r'/configure$', 'autotools'), - (r'/CMakeLists.txt$', 'cmake'), - (r'/SConstruct$', 'scons'), - (r'/setup.py$', 'python'), - (r'/NAMESPACE$', 'r'), - (r'/WORKSPACE$', 'bazel') + (r'/configure$', 'autotools'), + (r'/configure.(in|ac)$', 'autoreconf'), + (r'/Makefile.am$', 'autoreconf'), + (r'/CMakeLists.txt$', 'cmake'), + (r'/SConstruct$', 'scons'), + (r'/setup.py$', 'python'), + (r'/NAMESPACE$', 'r'), + (r'/WORKSPACE$', 'bazel') ] # Peek inside the compressed file. @@ -356,6 +387,7 @@ class BuildSystemGuesser: for pattern, bs in clues: if any(re.search(pattern, l) for l in lines): build_system = bs + break self.build_system = build_system -- cgit v1.2.3-70-g09d2