diff options
author | George Hartzell <hartzell@alerce.com> | 2017-10-09 14:14:19 -0700 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2017-10-09 14:14:19 -0700 |
commit | 0d1c36e5596fd880fae3e2e883ac7a0752df36c1 (patch) | |
tree | 623b4048652c25d6dff71adeaa0cc276b6bbc236 | |
parent | 5ccc9c17dcab7a19aac666755511591dbbff3a2b (diff) | |
download | spack-0d1c36e5596fd880fae3e2e883ac7a0752df36c1.tar.gz spack-0d1c36e5596fd880fae3e2e883ac7a0752df36c1.tar.bz2 spack-0d1c36e5596fd880fae3e2e883ac7a0752df36c1.tar.xz spack-0d1c36e5596fd880fae3e2e883ac7a0752df36c1.zip |
Add package for aspell and ass't dictionaries (#3890)
* Add package for aspell and ass't dictionaries
Add a package definition for aspell.
Add a handful of dictionaries to convince myself that the support for
a bunch of dictionaries works.
* Flake8 cleanup
* Use six's version of urlparse
`urlparse` is not python3 friendly. This works around it (stolen from
`.../cmd/md5.py`).
* Fix incorrect trimming regexp
* Clean up dictionary build
- more parsimonious use of `which` (`make()` has already been made)
- use `sh` instead of `bash`
* Use a helper method to generate info for variants
I figured out my issues with static methods. I *think* that it this
is pythonic.
* Convert aspell to an extendable package
Convert aspell to be extendable and rework the dictionaries to be
extensions.
As it stands, there's a great deal of cut and paste in the
dictionaries, I'll abstract that out next.
The {de,}activate methods copy a great deal of code out of
package.py. Perhaps there's a better way....
* Create AspellDictPackage and use it for the dictionaries
Reduce the repeated code, pull it into a base class.
I'm confused about why 'from spack import *' wasn't more useful in the
base class.
* Oops, -de & -es should be AspellDictPackages too
* Typo: pakcage -> package
* Address some commentary
* Update copyright dates, 2016->2017
-rw-r--r-- | lib/spack/spack/__init__.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/build_systems/aspell_dict.py | 57 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/aspell/package.py | 73 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/aspell6-de/package.py | 34 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/aspell6-en/package.py | 34 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/aspell6-es/package.py | 34 |
6 files changed, 234 insertions, 0 deletions
diff --git a/lib/spack/spack/__init__.py b/lib/spack/spack/__init__.py index 3b614b0482..19590b6790 100644 --- a/lib/spack/spack/__init__.py +++ b/lib/spack/spack/__init__.py @@ -177,6 +177,7 @@ __all__ = [] from spack.package import Package, run_before, run_after, on_package_attributes from spack.build_systems.makefile import MakefilePackage +from spack.build_systems.aspell_dict import AspellDictPackage from spack.build_systems.autotools import AutotoolsPackage from spack.build_systems.cmake import CMakePackage from spack.build_systems.qmake import QMakePackage @@ -193,6 +194,7 @@ __all__ += [ 'on_package_attributes', 'Package', 'MakefilePackage', + 'AspellDictPackage', 'AutotoolsPackage', 'CMakePackage', 'QMakePackage', diff --git a/lib/spack/spack/build_systems/aspell_dict.py b/lib/spack/spack/build_systems/aspell_dict.py new file mode 100644 index 0000000000..4d54e13b70 --- /dev/null +++ b/lib/spack/spack/build_systems/aspell_dict.py @@ -0,0 +1,57 @@ +############################################################################## +# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/llnl/spack +# Please also see the NOTICE and LICENSE files for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License (as +# published by the Free Software Foundation) version 2.1, February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +# Why doesn't this work for me? +# from spack import * +from llnl.util.filesystem import filter_file +from spack.build_systems.autotools import AutotoolsPackage +from spack.directives import extends +from spack.util.executable import which + + +# +# Aspell dictionaries install their bits into their prefix.lib +# and when activated they'll get symlinked into the appropriate aspell's +# dict dir (see aspell's {de,}activate methods). +# +# They aren't really an Autotools package, but it's close enough +# that this works if we override configure(). +class AspellDictPackage(AutotoolsPackage): + """Specialized class for builing aspell dictionairies.""" + + extends('aspell') + + def patch(self): + filter_file(r'^dictdir=.*$', 'dictdir=/lib', 'configure') + filter_file(r'^datadir=.*$', 'datadir=/lib', 'configure') + + def configure(self, spec, prefix): + aspell = spec['aspell'].prefix.bin.aspell + prezip = spec['aspell'].prefix.bin.prezip + destdir = prefix + + sh = which('sh') + sh('./configure', '--vars', "ASPELL={0}".format(aspell), + "PREZIP={0}".format(prezip), + "DESTDIR={0}".format(destdir)) diff --git a/var/spack/repos/builtin/packages/aspell/package.py b/var/spack/repos/builtin/packages/aspell/package.py new file mode 100644 index 0000000000..042246bbca --- /dev/null +++ b/var/spack/repos/builtin/packages/aspell/package.py @@ -0,0 +1,73 @@ +############################################################################## +# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/llnl/spack +# Please also see the LICENSE file for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License (as +# published by the Free Software Foundation) version 2.1, February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +from spack import * +from llnl.util.link_tree import LinkTree +import spack.store +from spack.package import ExtensionConflictError + + +# See also: AspellDictPackage +class Aspell(AutotoolsPackage): + """GNU Aspell is a Free and Open Source spell checker designed to + eventually replace Ispell.""" + + homepage = "http://aspell.net/" + url = "https://ftpmirror.gnu.org/aspell/aspell-0.60.6.1.tar.gz" + + extendable = True # support activating dictionaries + + version('0.60.6.1', 'e66a9c9af6a60dc46134fdacf6ce97d7') + + # The dictionaries install all their bits into their prefix.lib dir, + # we want to link them into aspell's dict-dir. + # These are identical to what's in spack/package.py except + # for using: + # - extension.prefix.lib instead of extension.prefix in LinkTree() + # - dest_dir instead of self.prefix in tree.(find_conflict|merge)() + def activate(self, extension, **kwargs): + aspell = which(self.prefix.bin.aspell) + dest_dir = aspell('dump', 'config', 'dict-dir', output=str).strip() + tree = LinkTree(extension.prefix.lib) + + def ignore(filename): + return (filename in spack.store.layout.hidden_file_paths or + kwargs.get('ignore', lambda f: False)(filename)) + + conflict = tree.find_conflict(dest_dir, ignore=ignore) + if conflict: + raise ExtensionConflictError(conflict) + + tree.merge(dest_dir, ignore=ignore) + + def deactivate(self, extension, **kwargs): + aspell = which(self.prefix.bin.aspell) + dest_dir = aspell('dump', 'config', 'dict-dir', output=str).strip() + + def ignore(filename): + return (filename in spack.store.layout.hidden_file_paths or + kwargs.get('ignore', lambda f: False)(filename)) + + tree = LinkTree(extension.prefix.lib) + tree.unmerge(dest_dir, ignore=ignore) diff --git a/var/spack/repos/builtin/packages/aspell6-de/package.py b/var/spack/repos/builtin/packages/aspell6-de/package.py new file mode 100644 index 0000000000..39ee56356b --- /dev/null +++ b/var/spack/repos/builtin/packages/aspell6-de/package.py @@ -0,0 +1,34 @@ +############################################################################## +# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/llnl/spack +# Please also see the NOTICE and LICENSE files for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License (as +# published by the Free Software Foundation) version 2.1, February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +from spack import * + + +class Aspell6De(AspellDictPackage): + """German (de) dictionary for aspell.""" + + homepage = "http://aspell.net/" + url = "ftp://ftp.gnu.org/gnu/aspell/dict/de/aspell6-de-20030222-1.tar.bz2" + + version('6-de-20030222-1', '5950c5c8a36fc93d4d7616591bace6a6') diff --git a/var/spack/repos/builtin/packages/aspell6-en/package.py b/var/spack/repos/builtin/packages/aspell6-en/package.py new file mode 100644 index 0000000000..c2498314d9 --- /dev/null +++ b/var/spack/repos/builtin/packages/aspell6-en/package.py @@ -0,0 +1,34 @@ +############################################################################## +# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/llnl/spack +# Please also see the NOTICE and LICENSE files for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License (as +# published by the Free Software Foundation) version 2.1, February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +from spack import * + + +class Aspell6En(AspellDictPackage): + """English (en) dictionary for aspell.""" + + homepage = "http://aspell.net/" + url = "ftp://ftp.gnu.org/gnu/aspell/dict/en/aspell6-en-2017.01.22-0.tar.bz2" + + version('2017.01.22-0', 'a6e002076574de9dc4915967032a1dab') diff --git a/var/spack/repos/builtin/packages/aspell6-es/package.py b/var/spack/repos/builtin/packages/aspell6-es/package.py new file mode 100644 index 0000000000..5793462218 --- /dev/null +++ b/var/spack/repos/builtin/packages/aspell6-es/package.py @@ -0,0 +1,34 @@ +############################################################################## +# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/llnl/spack +# Please also see the NOTICE and LICENSE files for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License (as +# published by the Free Software Foundation) version 2.1, February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +from spack import * + + +class Aspell6Es(AspellDictPackage): + """Spanish (es) dictionary for aspell.""" + + homepage = "http://aspell.net/" + url = "ftp://ftp.gnu.org/gnu/aspell/dict/es/aspell6-es-1.11-2.tar.bz2" + + version('1.11-2', '8406336a89c64e47e96f4153d0af70c4') |